// ------------------------------------------------------------------
// NOTICE file corresponding to the section 4d of The Apache License,
// Version 2.0, in this case for Apache Flink-shaded
// ------------------------------------------------------------------

Apache Flink-shaded
Copyright 2006-2021 The Apache Software Foundation

This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).

flink-shaded-zookeeper-3
Copyright 2014-2021 The Apache Software Foundation

This project bundles the following dependencies under the Apache Software License 2.0 (http://www.apache.org/licenses/LICENSE-2.0.txt)

- com.google.guava:guava:27.0.1-jre
- org.apache.curator:curator-client:4.2.0
- org.apache.curator:curator-framework:4.2.0
- org.apache.curator:curator-recipes:4.2.0
- org.apache.zookeeper:zookeeper:3.4.14


Curator Recipes
Copyright 2011-2019 The Apache Software Foundation

Curator Framework
Copyright 2011-2019 The Apache Software Foundation

Curator Client
Copyright 2011-2019 The Apache Software Foundation

