/**
 * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
 * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
 * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
 * License. You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
 * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations under the License.
 *
 * Library for Plumtree - Push-Lazy-pUsh Multicast TREE, an implementation of Epidemic Broadcast Tree
 *
 * <p>
 * These classes are included in the standard Tuweni distribution, or separately when using the gradle dependency
 * 'org.apache.tuweni:tuweni-plumtree' (tuweni-plumtree.jar).
 */
@ParametersAreNonnullByDefault
package org.apache.tuweni.plumtree;

import javax.annotation.ParametersAreNonnullByDefault;
