
                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed 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.

----------------------------------------------------------------------------------------------------

pulsar-common/src/main/java/org/apache/pulsar/common/util/protobuf/ByteBufCoded{Input,Output}Stream.java

Copyright 2014, Google Inc.  All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

    * Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
    * Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Code generated by the Protocol Buffer compiler is owned by the owner
of the input file used when generating it.  This code is not
standalone and requires a support library to be linked with it.  This
support library is itself covered by the above license.

----------------------------------------------------------------------------------------------------

This projects includes binary packages with the following licenses:

The Apache Software License, Version 2.0
 * JCommander -- com.beust-jcommander-1.82.jar
 * High Performance Primitive Collections for Java -- com.carrotsearch-hppc-0.9.1.jar
 * Jackson
     - com.fasterxml.jackson.core-jackson-annotations-2.14.2.jar
     - com.fasterxml.jackson.core-jackson-core-2.14.2.jar
     - com.fasterxml.jackson.core-jackson-databind-2.14.2.jar
     - com.fasterxml.jackson.dataformat-jackson-dataformat-yaml-2.14.2.jar
     - com.fasterxml.jackson.jaxrs-jackson-jaxrs-base-2.14.2.jar
     - com.fasterxml.jackson.jaxrs-jackson-jaxrs-json-provider-2.14.2.jar
     - com.fasterxml.jackson.module-jackson-module-jaxb-annotations-2.14.2.jar
     - com.fasterxml.jackson.module-jackson-module-jsonSchema-2.14.2.jar
     - com.fasterxml.jackson.datatype-jackson-datatype-jdk8-2.14.2.jar
     - com.fasterxml.jackson.datatype-jackson-datatype-jsr310-2.14.2.jar
     - com.fasterxml.jackson.module-jackson-module-parameter-names-2.14.2.jar
 * Caffeine -- com.github.ben-manes.caffeine-caffeine-2.9.1.jar
 * Conscrypt -- org.conscrypt-conscrypt-openjdk-uber-2.5.2.jar
 * Proto Google Common Protos -- com.google.api.grpc-proto-google-common-protos-2.0.1.jar
 * Bitbucket -- org.bitbucket.b_c-jose4j-0.9.3.jar
 * Gson
    - com.google.code.gson-gson-2.8.9.jar
    - io.gsonfire-gson-fire-1.8.5.jar
 * Guava
    - com.google.guava-guava-32.0.0-jre.jar
    - com.google.guava-failureaccess-1.0.1.jar
    - com.google.guava-listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar
 * J2ObjC Annotations -- com.google.j2objc-j2objc-annotations-1.3.jar
 * Netty Reactive Streams -- com.typesafe.netty-netty-reactive-streams-2.0.6.jar
 * Swagger
    - io.swagger-swagger-annotations-1.6.10.jar
    - io.swagger-swagger-core-1.6.10.jar
    - io.swagger-swagger-models-1.6.10.jar
 * DataSketches
    - com.yahoo.datasketches-memory-0.8.3.jar
    - com.yahoo.datasketches-sketches-core-0.8.3.jar
 * Apache Commons
    - commons-cli-commons-cli-1.5.0.jar
    - commons-codec-commons-codec-1.15.jar
    - commons-configuration-commons-configuration-1.10.jar
    - commons-io-commons-io-2.8.0.jar
    - commons-lang-commons-lang-2.6.jar
    - commons-logging-commons-logging-1.1.1.jar
    - org.apache.commons-commons-collections4-4.4.jar
    - org.apache.commons-commons-compress-1.21.jar
    - org.apache.commons-commons-lang3-3.11.jar
    - org.apache.commons-commons-text-1.10.0.jar
 * Netty
    - io.netty-netty-buffer-4.1.93.Final.jar
    - io.netty-netty-codec-4.1.93.Final.jar
    - io.netty-netty-codec-dns-4.1.93.Final.jar
    - io.netty-netty-codec-http-4.1.93.Final.jar
    - io.netty-netty-codec-http2-4.1.93.Final.jar
    - io.netty-netty-codec-socks-4.1.93.Final.jar
    - io.netty-netty-codec-haproxy-4.1.93.Final.jar
    - io.netty-netty-common-4.1.93.Final.jar
    - io.netty-netty-handler-4.1.93.Final.jar
    - io.netty-netty-handler-proxy-4.1.93.Final.jar
    - io.netty-netty-resolver-4.1.93.Final.jar
    - io.netty-netty-resolver-dns-4.1.93.Final.jar
    - io.netty-netty-resolver-dns-classes-macos-4.1.93.Final.jar
    - io.netty-netty-resolver-dns-native-macos-4.1.93.Final-osx-aarch_64.jar
    - io.netty-netty-resolver-dns-native-macos-4.1.93.Final-osx-x86_64.jar
    - io.netty-netty-transport-4.1.93.Final.jar
    - io.netty-netty-transport-classes-epoll-4.1.93.Final.jar
    - io.netty-netty-transport-native-epoll-4.1.93.Final-linux-x86_64.jar
    - io.netty-netty-transport-native-epoll-4.1.93.Final.jar
    - io.netty-netty-transport-native-unix-common-4.1.93.Final.jar
    - io.netty-netty-transport-native-unix-common-4.1.93.Final-linux-x86_64.jar
    - io.netty-netty-tcnative-boringssl-static-2.0.61.Final.jar
    - io.netty-netty-tcnative-boringssl-static-2.0.61.Final-linux-aarch_64.jar
    - io.netty-netty-tcnative-boringssl-static-2.0.61.Final-linux-x86_64.jar
    - io.netty-netty-tcnative-boringssl-static-2.0.61.Final-osx-aarch_64.jar
    - io.netty-netty-tcnative-boringssl-static-2.0.61.Final-osx-x86_64.jar
    - io.netty-netty-tcnative-boringssl-static-2.0.61.Final-windows-x86_64.jar
    - io.netty-netty-tcnative-classes-2.0.61.Final.jar
    - io.netty.incubator-netty-incubator-transport-classes-io_uring-0.0.21.Final.jar
    - io.netty.incubator-netty-incubator-transport-native-io_uring-0.0.21.Final-linux-x86_64.jar
    - io.netty.incubator-netty-incubator-transport-native-io_uring-0.0.21.Final-linux-aarch_64.jar
 * Prometheus client
    - io.prometheus.jmx-collector-0.16.1.jar
    - io.prometheus-simpleclient-0.16.0.jar
    - io.prometheus-simpleclient_caffeine-0.16.0.jar
    - io.prometheus-simpleclient_common-0.16.0.jar
    - io.prometheus-simpleclient_hotspot-0.16.0.jar
    - io.prometheus-simpleclient_httpserver-0.16.0.jar
    - io.prometheus-simpleclient_jetty-0.16.0.jar
    - io.prometheus-simpleclient_log4j2-0.16.0.jar
    - io.prometheus-simpleclient_servlet-0.16.0.jar
    - io.prometheus-simpleclient_servlet_common-0.16.0.jar
    - io.prometheus-simpleclient_tracer_common-0.16.0.jar
    - io.prometheus-simpleclient_tracer_otel-0.16.0.jar
    - io.prometheus-simpleclient_tracer_otel_agent-0.16.0.jar
 * Jakarta Bean Validation API
    - jakarta.validation-jakarta.validation-api-2.0.2.jar
    - javax.validation-validation-api-1.1.0.Final.jar
 * Log4J
    - org.apache.logging.log4j-log4j-api-2.18.0.jar
    - org.apache.logging.log4j-log4j-core-2.18.0.jar
    - org.apache.logging.log4j-log4j-slf4j-impl-2.18.0.jar
    - org.apache.logging.log4j-log4j-web-2.18.0.jar
 * Java Native Access JNA
    - net.java.dev.jna-jna-jpms-5.12.1.jar
    - net.java.dev.jna-jna-platform-jpms-5.12.1.jar
 * BookKeeper
    - org.apache.bookkeeper-bookkeeper-common-4.16.2.jar
    - org.apache.bookkeeper-bookkeeper-common-allocator-4.16.2.jar
    - org.apache.bookkeeper-bookkeeper-proto-4.16.2.jar
    - org.apache.bookkeeper-bookkeeper-server-4.16.2.jar
    - org.apache.bookkeeper-bookkeeper-tools-framework-4.16.2.jar
    - org.apache.bookkeeper-circe-checksum-4.16.2.jar
    - org.apache.bookkeeper-cpu-affinity-4.16.2.jar
    - org.apache.bookkeeper-statelib-4.16.2.jar
    - org.apache.bookkeeper-stream-storage-api-4.16.2.jar
    - org.apache.bookkeeper-stream-storage-common-4.16.2.jar
    - org.apache.bookkeeper-stream-storage-java-client-4.16.2.jar
    - org.apache.bookkeeper-stream-storage-java-client-base-4.16.2.jar
    - org.apache.bookkeeper-stream-storage-proto-4.16.2.jar
    - org.apache.bookkeeper-stream-storage-server-4.16.2.jar
    - org.apache.bookkeeper-stream-storage-service-api-4.16.2.jar
    - org.apache.bookkeeper-stream-storage-service-impl-4.16.2.jar
    - org.apache.bookkeeper.http-http-server-4.16.2.jar
    - org.apache.bookkeeper.http-vertx-http-server-4.16.2.jar
    - org.apache.bookkeeper.stats-bookkeeper-stats-api-4.16.2.jar
    - org.apache.bookkeeper.stats-prometheus-metrics-provider-4.16.2.jar
    - org.apache.distributedlog-distributedlog-common-4.16.2.jar
    - org.apache.distributedlog-distributedlog-core-4.16.2-tests.jar
    - org.apache.distributedlog-distributedlog-core-4.16.2.jar
    - org.apache.distributedlog-distributedlog-protocol-4.16.2.jar
    - org.apache.bookkeeper.stats-codahale-metrics-provider-4.16.2.jar
    - org.apache.bookkeeper-bookkeeper-slogger-api-4.16.2.jar
    - org.apache.bookkeeper-bookkeeper-slogger-slf4j-4.16.2.jar
    - org.apache.bookkeeper-native-io-4.16.2.jar
  * Apache HTTP Client
    - org.apache.httpcomponents-httpclient-4.5.13.jar
    - org.apache.httpcomponents-httpcore-4.4.15.jar
 * AirCompressor
    - io.airlift-aircompressor-0.20.jar
 * AsyncHttpClient
    - org.asynchttpclient-async-http-client-2.12.1.jar
    - org.asynchttpclient-async-http-client-netty-utils-2.12.1.jar
 * Jetty
    - org.eclipse.jetty-jetty-client-9.4.51.v20230217.jar
    - org.eclipse.jetty-jetty-continuation-9.4.51.v20230217.jar
    - org.eclipse.jetty-jetty-http-9.4.51.v20230217.jar
    - org.eclipse.jetty-jetty-io-9.4.51.v20230217.jar
    - org.eclipse.jetty-jetty-proxy-9.4.51.v20230217.jar
    - org.eclipse.jetty-jetty-security-9.4.51.v20230217.jar
    - org.eclipse.jetty-jetty-server-9.4.51.v20230217.jar
    - org.eclipse.jetty-jetty-servlet-9.4.51.v20230217.jar
    - org.eclipse.jetty-jetty-servlets-9.4.51.v20230217.jar
    - org.eclipse.jetty-jetty-util-9.4.51.v20230217.jar
    - org.eclipse.jetty-jetty-util-ajax-9.4.51.v20230217.jar
    - org.eclipse.jetty.websocket-javax-websocket-client-impl-9.4.51.v20230217.jar
    - org.eclipse.jetty.websocket-websocket-api-9.4.51.v20230217.jar
    - org.eclipse.jetty.websocket-websocket-client-9.4.51.v20230217.jar
    - org.eclipse.jetty.websocket-websocket-common-9.4.51.v20230217.jar
    - org.eclipse.jetty.websocket-websocket-server-9.4.51.v20230217.jar
    - org.eclipse.jetty.websocket-websocket-servlet-9.4.51.v20230217.jar
    - org.eclipse.jetty-jetty-alpn-conscrypt-server-9.4.51.v20230217.jar
    - org.eclipse.jetty-jetty-alpn-server-9.4.51.v20230217.jar
 * SnakeYaml -- org.yaml-snakeyaml-2.0.jar
 * RocksDB - org.rocksdb-rocksdbjni-7.9.2.jar
 * Google Error Prone Annotations - com.google.errorprone-error_prone_annotations-2.5.1.jar
 * Apache Thrift - org.apache.thrift-libthrift-0.14.2.jar
 * OkHttp3
     - com.squareup.okhttp3-logging-interceptor-4.9.3.jar
     - com.squareup.okhttp3-okhttp-4.9.3.jar
 * Okio - com.squareup.okio-okio-2.8.0.jar
 * Javassist -- org.javassist-javassist-3.25.0-GA.jar
 * Kotlin Standard Lib
     - org.jetbrains.kotlin-kotlin-stdlib-1.6.0.jar
     - org.jetbrains.kotlin-kotlin-stdlib-common-1.6.0.jar
     - org.jetbrains.kotlin-kotlin-stdlib-jdk7-1.6.0.jar
     - org.jetbrains.kotlin-kotlin-stdlib-jdk8-1.6.0.jar
     - org.jetbrains-annotations-13.0.jar
 * gRPC
    - io.grpc-grpc-all-1.45.1.jar
    - io.grpc-grpc-auth-1.45.1.jar
    - io.grpc-grpc-context-1.45.1.jar
    - io.grpc-grpc-core-1.45.1.jar
    - io.grpc-grpc-netty-1.45.1.jar
    - io.grpc-grpc-protobuf-1.45.1.jar
    - io.grpc-grpc-protobuf-lite-1.45.1.jar
    - io.grpc-grpc-stub-1.45.1.jar
    - io.grpc-grpc-alts-1.45.1.jar
    - io.grpc-grpc-api-1.45.1.jar
    - io.grpc-grpc-grpclb-1.45.1.jar
    - io.grpc-grpc-netty-shaded-1.45.1.jar
    - io.grpc-grpc-services-1.45.1.jar
    - io.grpc-grpc-xds-1.45.1.jar
    - io.grpc-grpc-rls-1.45.1.jar
    - com.google.auto.service-auto-service-annotations-1.0.jar
  * Perfmark
    - io.perfmark-perfmark-api-0.19.0.jar
  * OpenCensus
    - io.opencensus-opencensus-api-0.28.0.jar
    - io.opencensus-opencensus-contrib-http-util-0.28.0.jar
    - io.opencensus-opencensus-proto-0.2.0.jar
  * Jodah
    - net.jodah-typetools-0.5.0.jar
    - net.jodah-failsafe-2.4.4.jar
  * Apache Avro
    - org.apache.avro-avro-1.10.2.jar
    - org.apache.avro-avro-protobuf-1.10.2.jar
  * Apache Curator
    - org.apache.curator-curator-client-5.1.0.jar
    - org.apache.curator-curator-framework-5.1.0.jar
    - org.apache.curator-curator-recipes-5.1.0.jar
  * Apache Yetus
    - org.apache.yetus-audience-annotations-0.12.0.jar
  * Kubernetes Client
    - io.kubernetes-client-java-18.0.0.jar
    - io.kubernetes-client-java-api-18.0.0.jar
    - io.kubernetes-client-java-proto-18.0.0.jar
  * Dropwizard
    - io.dropwizard.metrics-metrics-core-4.1.12.1.jar
    - io.dropwizard.metrics-metrics-graphite-4.1.12.1.jar
    - io.dropwizard.metrics-metrics-jvm-4.1.12.1.jar
    - io.dropwizard.metrics-metrics-jmx-4.1.12.1.jar
  * Prometheus
    - io.prometheus-simpleclient_httpserver-0.16.0.jar
  * Java JSON WebTokens
    - io.jsonwebtoken-jjwt-api-0.11.1.jar
    - io.jsonwebtoken-jjwt-impl-0.11.1.jar
    - io.jsonwebtoken-jjwt-jackson-0.11.1.jar
  * JCTools - Java Concurrency Tools for the JVM
    - org.jctools-jctools-core-2.1.2.jar
  * Vertx
    - io.vertx-vertx-auth-common-4.3.8.jar
    - io.vertx-vertx-bridge-common-4.3.8.jar
    - io.vertx-vertx-core-4.3.8.jar
    - io.vertx-vertx-web-4.3.8.jar
    - io.vertx-vertx-web-common-4.3.8.jar
  * Apache ZooKeeper
    - org.apache.zookeeper-zookeeper-3.8.1.jar
    - org.apache.zookeeper-zookeeper-jute-3.8.1.jar
    - org.apache.zookeeper-zookeeper-prometheus-metrics-3.8.1.jar
  * Snappy Java
    - org.xerial.snappy-snappy-java-1.1.10.1.jar
  * Google HTTP Client
    - com.google.http-client-google-http-client-gson-1.41.0.jar
    - com.google.http-client-google-http-client-1.41.0.jar
    - com.google.auto.value-auto-value-annotations-1.9.jar
    - com.google.re2j-re2j-1.5.jar
  * Jetcd
    - io.etcd-jetcd-common-0.5.11.jar
    - io.etcd-jetcd-core-0.5.11.jar
  * IPAddress
    - com.github.seancfoley-ipaddress-5.3.3.jar
  * RxJava
    - io.reactivex.rxjava3-rxjava-3.0.1.jar
  * RabbitMQ Java Client
    - com.rabbitmq-amqp-client-5.5.3.jar
  * RoaringBitmap
    - org.roaringbitmap-RoaringBitmap-0.9.44.jar

BSD 3-clause "New" or "Revised" License
 * Google auth library
    - com.google.auth-google-auth-library-credentials-1.4.0.jar -- ../licenses/LICENSE-google-auth-library.txt
    - com.google.auth-google-auth-library-oauth2-http-1.4.0.jar -- ../licenses/LICENSE-google-auth-library.txt
 * LevelDB -- (included in org.rocksdb.*.jar) -- ../licenses/LICENSE-LevelDB.txt
 * JSR305 -- com.google.code.findbugs-jsr305-3.0.2.jar -- ../licenses/LICENSE-JSR305.txt
 * JLine -- jline-jline-2.14.6.jar -- ../licenses/LICENSE-JLine.txt
 * JLine3 -- org.jline-jline-3.21.0.jar -- ../licenses/LICENSE-JLine.txt

BSD 2-Clause License
 * HdrHistogram -- org.hdrhistogram-HdrHistogram-2.1.9.jar -- ../licenses/LICENSE-HdrHistogram.txt

MIT License
 * Java SemVer -- com.github.zafarkhaja-java-semver-0.9.0.jar -- ../licenses/LICENSE-SemVer.txt
 * SLF4J -- ../licenses/LICENSE-SLF4J.txt
    - org.slf4j-slf4j-api-1.7.32.jar
    - org.slf4j-jcl-over-slf4j-1.7.32.jar
 * The Checker Framework
    - org.checkerframework-checker-qual-3.33.0.jar
 * oshi
    - com.github.oshi-oshi-core-java11-6.4.0.jar
 * Auth0, Inc.
    - com.auth0-java-jwt-4.3.0.jar
    - com.auth0-jwks-rsa-0.22.0.jar
Protocol Buffers License
 * Protocol Buffers
   - com.google.protobuf-protobuf-java-3.19.6.jar -- ../licenses/LICENSE-protobuf.txt
   - com.google.protobuf-protobuf-java-util-3.19.6.jar -- ../licenses/LICENSE-protobuf.txt

CDDL-1.1 -- ../licenses/LICENSE-CDDL-1.1.txt
 * Java Annotations API
    - javax.annotation-javax.annotation-api-1.3.2.jar
    - com.sun.activation-javax.activation-1.2.0.jar
    - javax.xml.bind-jaxb-api-2.3.1.jar
 * Java Servlet API -- javax.servlet-javax.servlet-api-3.1.0.jar
 * WebSocket Server API -- javax.websocket-javax.websocket-client-api-1.0.jar
 * Java Web Service REST API -- javax.ws.rs-javax.ws.rs-api-2.1.jar
 * HK2 - Dependency Injection Kernel
    - org.glassfish.hk2-hk2-api-2.6.1.jar
    - org.glassfish.hk2-hk2-locator-2.6.1.jar
    - org.glassfish.hk2-hk2-utils-2.6.1.jar
    - org.glassfish.hk2-osgi-resource-locator-1.0.3.jar
    - org.glassfish.hk2.external-aopalliance-repackaged-2.6.1.jar
 * Jersey
    - org.glassfish.jersey.containers-jersey-container-servlet-2.34.jar
    - org.glassfish.jersey.containers-jersey-container-servlet-core-2.34.jar
    - org.glassfish.jersey.core-jersey-client-2.34.jar
    - org.glassfish.jersey.core-jersey-common-2.34.jar
    - org.glassfish.jersey.core-jersey-server-2.34.jar
    - org.glassfish.jersey.ext-jersey-entity-filtering-2.34.jar
    - org.glassfish.jersey.media-jersey-media-json-jackson-2.34.jar
    - org.glassfish.jersey.media-jersey-media-multipart-2.34.jar
    - org.glassfish.jersey.inject-jersey-hk2-2.34.jar
 * Mimepull -- org.jvnet.mimepull-mimepull-1.9.13.jar

Eclipse Distribution License 1.0 -- ../licenses/LICENSE-EDL-1.0.txt
 * Jakarta Activation
    - jakarta.activation-jakarta.activation-api-1.2.2.jar
 * Jakarta XML Binding -- jakarta.xml.bind-jakarta.xml.bind-api-2.3.3.jar

Eclipse Public License - v2.0 -- ../licenses/LICENSE-EPL-2.0.txt
 * Jakarta Annotations API -- jakarta.annotation-jakarta.annotation-api-1.3.5.jar
 * Jakarta RESTful Web Services -- jakarta.ws.rs-jakarta.ws.rs-api-2.1.6.jar
 * Jakarta Injection -- org.glassfish.hk2.external-jakarta.inject-2.6.1.jar

Public Domain (CC0) -- ../licenses/LICENSE-CC0.txt
 * Reactive Streams -- org.reactivestreams-reactive-streams-1.0.3.jar

Creative Commons Attribution License
 * Jcip -- ../licenses/LICENSE-jcip.txt
    - net.jcip-jcip-annotations-1.0.jar

Bouncy Castle License
 * Bouncy Castle -- ../licenses/LICENSE-bouncycastle.txt
    - org.bouncycastle-bcpkix-jdk15on-1.69.jar
    - org.bouncycastle-bcprov-ext-jdk15on-1.69.jar
    - org.bouncycastle-bcprov-jdk15on-1.69.jar
    - org.bouncycastle-bcutil-jdk15on-1.69.jar

------------------------

Additionaly, Netty includes code with the following licenses:

Contains a modified portion of 'Webbit', an event based WebSocket and HTTP server, which can be obtained at:

 * LICENSE:
   * ../licenses/LICENSE-Webbit.txt (BSD License)
 * HOMEPAGE:
   * https://github.com/joewalnes/webbit

Contains a modified portion of 'SLF4J', a simple logging facade for Java, which can be obtained at:

 * LICENSE:
   * ../licenses/LICENSE-SLF4J.txt (MIT License)
 * HOMEPAGE:
   * http://www.slf4j.org/

Contains a modified portion of 'jbzip2', a Java bzip2 compression and decompression library written
by Matthew J. Francis. It can be obtained at:

 * LICENSE:
   * ../licenses/LICENSE-jbzip2.txt (MIT License)
 * HOMEPAGE:
   * https://code.google.com/p/jbzip2/

Contains a modified portion of 'libdivsufsort', a C API library to construct
the suffix array and the Burrows-Wheeler transformed string for any input string of
a constant-size alphabet written by Yuta Mori. It can be obtained at:

 * LICENSE:
   * ../licenses/LICENSE-libdivsufsort.txt (MIT License)
 * HOMEPAGE:
   * https://github.com/y-256/libdivsufsort

Contains a modified portion of 'jfastlz', a Java port of FastLZ compression
and decompression library written by William Kinney. It can be obtained at:

 * LICENSE:
   * ../licenses/LICENSE-jfastlz.txt (MIT License)
 * HOMEPAGE:
   * https://code.google.com/p/jfastlz/

Contains a modified portion of and optionally depends on 'Protocol Buffers', Google's data
interchange format, which can be obtained at:

 * LICENSE:
   * ../licenses/LICENSE-protobuf.txt (New BSD License)
 * HOMEPAGE:
* https://github.com/google/protobuf
