
                                 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.


Apache Dubbo Admin Submodules:

Apache Dubbo Admin includes a number of submodules with separate copyright notices
and license terms. Your use of these submodules is subject to the terms and
conditions of the following licenses.

========================================================================
Apache 2.0 licenses
========================================================================

The following components are provided under the Apache License. See project link for details.
The text of each license is also included at licenses/LICENSE-[project].

    * Alibaba: fastjson 1.2.46 https://raw.githubusercontent.com/alibaba/fastjson/1.2.46/license.txt Apache 2.0
    - fastjson-1.2.46.jar

    * mapstruct: mapstruct 1.2.0.Final https://raw.githubusercontent.com/mapstruct/mapstruct/1.2.0.Final/LICENSE.txt Apache 2.0
    - mapstruct-1.2.0.Final.jar

    * Swagger-api: swagger-core 1.5.20 https://raw.githubusercontent.com/swagger-api/swagger-core/v1.5.20/LICENSE Apache 2.0
    - swagger-annotations-1.5.20.jar
    - swagger-models-1.5.20.jar

========================================================================
Apache 1.1 licenses
========================================================================

The following components are provided under the Apache License. See project link for details.
The text of each license is the standard Apache 1.1 license.

    * Apache: log4j 1.2.17 https://raw.githubusercontent.com/apache/log4j/v1_2_17/LICENSE Apache 1.1
    - log4j-1.2.17.jar



========================================================================
Apache 2.0 licenses
========================================================================

The following components are provided under the Apache License. See project link for details.
The text of each license is the standard Apache 2.0 license.

    * Ctripcorp: apollo v1.2.0 https://raw.githubusercontent.com/ctripcorp/apollo/v1.2.0/LICENSE  Apache 2.0
    - apollo-core-1.2.0.jar
    - apollo-openapi-1.2.0.jar

    * Apache: audience-annotations 0.5.0 https://raw.githubusercontent.com/apache/yetus/rel/0.5.0/LICENSE Apache 2.0
    - audience-annotations-0.5.0.jar

    * Raphw: byte-buddy 1.7.11 https://raw.githubusercontent.com/raphw/byte-buddy/byte-buddy-1.7.11/LICENSE Apache 2.0
    - byte-buddy-1.7.11.jar

    * FasterXML: java-classmate 1.3.4 https://github.com/FasterXML/java-classmate/tree/classmate-1.3.4 Apache 2.0
    - classmate-1.3.4.jar

    * Apache: commons-cli 1.2 https://raw.githubusercontent.com/apache/commons-cli/cli-1.2/LICENSE.txt Apache 2.0
    - commons-cli-1.2.jar

    * Apache: commons-codec 1.11 https://raw.githubusercontent.com/apache/commons-codec/commons-codec-1.11/LICENSE.txt Apache 2.0
    - commons-codec-1.11.jar

    * Apache: commons-lang3 3.7 https://raw.githubusercontent.com/apache/commons-lang/LANG_3_7/LICENSE.txt Apache 2.0
    - commons-lang3-3.7.jar

    * Apache: commons-pool 2.5.0 https://raw.githubusercontent.com/apache/commons-pool/POOL_2_5_0/LICENSE.txt Apache 2.0
    - commons-pool2-2.5.0.jar

    * Apache: curator 2.12.0 https://raw.githubusercontent.com/apache/curator/apache-curator-2.12.0/LICENSE Apache 2.0
    - curator-client-2.12.0.jar
    - curator-framework-2.12.0.jar
    - curator-recipes-2.12.0.jar

    * Apache: dubbo 2.7.0 https://raw.githubusercontent.com/apache/incubator-dubbo/dubbo-2.7.0/LICENSE Apache 2.0
    - dubbo-2.7.0.jar
    - dubbo-common-2.7.0.jar
    - dubbo-serialization-api-2.7.0.jar
    - dubbo-serialization-kryo-2.7.0.jar

    * Google: gson 2.8.4 https://raw.githubusercontent.com/google/gson/gson-parent-2.8.4/LICENSE Apache 2.0
    - gson-2.8.4.jar

    * Google: guava 20.0 https://raw.githubusercontent.com/google/guava/v20.0/COPYING Apache 2.0
    - guava-20.0.jar

    * hibernate: hibernate-validator 6.0.9.final https://raw.githubusercontent.com/hibernate/hibernate-validator/6.0.9.Final/license.txtl Apache 2.0
    - hibernate-validator-6.0.9.Final.jar

    * Apache: httpcomponents-client 4.5.5 https://raw.githubusercontent.com/apache/httpcomponents-client/4.5.5/LICENSE.txt Apache 2.0
    - httpclient-4.5.5.jar

    * Apache: httpcomponents-core 4.4.9 https://raw.githubusercontent.com/apache/httpcomponents-core/4.4.9/LICENSE.txt Apache 2.0
    - httpcore-4.4.9.jar

    * FasterXML: jackson-annotations 2.9.0 https://github.com/FasterXML/jackson-annotations/tree/jackson-annotations-2.9.0 Apache 2.0
    - jackson-annotations-2.9.0.jar

    * FasterXML: jackson-core 2.9.5 https://github.com/FasterXML/jackson-core/tree/jackson-core-2.9.5 Apache 2.0
    - jackson-core-2.9.5.jar

    * FasterXML: jackson-databind 2.9.5 https://github.com/FasterXML/jackson-databind/tree/jackson-databind-2.9.5 Apache 2.0
    - jackson-databind-2.9.5.jar

    * FasterXML: jackson-modules-java8 2.9.5 https://raw.githubusercontent.com/FasterXML/jackson-modules-java8/jackson-modules-java8-2.9.5/LICENSE Apache 2.0
    - jackson-datatype-jdk8-2.9.5.jar
    - jackson-datatype-jsr310-2.9.5.jar
    - jackson-module-parameter-names-2.9.5.jar

    * jboss: jboss-logging 3.3.2-final https://mvnrepository.com/artifact/org.jboss.logging/jboss-logging/3.3.2.Final Apache 2.0
    - jboss-logging-3.3.2.Final.jar


    * Apache: logging-log4j2 2.10.0 https://raw.githubusercontent.com/apache/logging-log4j2/log4j-2.10.0/LICENSE.txt Apache 2.0
    - log4j-api-2.10.0.jar
    - log4j-to-slf4j-2.10.0.jar

    * netty: netty 4.1.30.final https://raw.githubusercontent.com/netty/netty/netty-4.1.30.Final/LICENSE.txt Apache 2.0
    - netty-all-4.1.30.Final.jar

    * Spring: spring-framework 5.0.6.RELEASE https://raw.githubusercontent.com/spring-projects/spring-framework/v5.0.6.RELEASE/src/docs/dist/license.txt Apache 2.0
    - spring-aop-5.0.6.RELEASE.jar
    - spring-beans-5.0.6.RELEASE.jar
    - spring-aspects-5.0.6.RELEASE.jar
    - spring-context-5.0.6.RELEASE.jar
    - spring-core-5.0.6.RELEASE.jar
    - spring-expression-5.0.6.RELEASE.jar
    - spring-jcl-5.0.6.RELEASE.jar
    - spring-jdbc-5.0.6.RELEASE.jar
    - spring-web-5.0.6.RELEASE.jar
    - spring-orm-5.0.6.RELEASE.jar
    - spring-webmvc-5.0.6.RELEASE.jar
    - spring-tx-5.0.6.RELEASE.jar

    * Spring: spring-boot 2.0.2.RELEASE https://raw.githubusercontent.com/spring-projects/spring-boot/v2.0.2.RELEASE/LICENSE.txt Apache 2.0
    - spring-boot-2.0.2.RELEASE.jar
    - spring-boot-autoconfigure-2.0.2.RELEASE.jar
    - spring-boot-starter-2.0.2.RELEASE.jar
    - spring-boot-starter-json-2.0.2.RELEASE.jar
    - spring-boot-starter-logging-2.0.2.RELEASE.jar
    - spring-boot-starter-tomcat-2.0.2.RELEASE.jar
    - spring-boot-starter-web-2.0.2.RELEASE.jar
    - spring-boot-starter-data-jpa-2.0.2.RELEASE.jar
    - spring-boot-starter-aop-2.0.2.RELEASE.jar
    - spring-boot-starter-jdbc-2.0.2.RELEASE.jar

    * Spring: spring-data-commons 2.0.7.RELEASE https://raw.githubusercontent.com/spring-projects/spring-data-commons/2.0.7.RELEASE/src/main/resources/license.txt Apache 2.0
    - spring-data-commons-2.0.7.RELEASE.jar

    * Spring: spring-data-jpa 2.0.7.RELEASE https://raw.githubusercontent.com/spring-projects/spring-data-jpa/2.0.7.RELEASE/src/main/resources/license.txt Apache 2.0
    - spring-data-jpa-2.0.7.RELEASE.jar

    * asomov snakeyml 1.19  https://bitbucket.org/asomov/snakeyaml/raw/153cce6397b5a5bb21fa1e4a8496433c55772760/LICENSE.txt Apache 2.0
    - snakeyaml-1.19.jar

    * Spring: spring-plugin 1.2.0.RELEASE https://raw.githubusercontent.com/spring-projects/spring-plugin/1.2.0.RELEASE/LICENSE.txt Apache 2.0
    - spring-plugin-core-1.2.0.RELEASE.jar
    - spring-plugin-metadata-1.2.0.RELEASE.jar

    * Springfox: springfox 2.9.2 https://raw.githubusercontent.com/springfox/springfox/2.9.2/LICENSE Apache 2.0
    - springfox-core-2.9.2.jar
    - springfox-schema-2.9.2.jar
    - springfox-spi-2.9.2.jar
    - springfox-spring-web-2.9.2.jar
    - springfox-swagger-common-2.9.2.jar
    - springfox-swagger-ui-2.9.2.jar
    - springfox-swagger2-2.9.2.jar

    * tomcat tomcat 8.5.31 http://svn.apache.org/repos/asf/tomcat/archive/tc8.5.x/tags/TOMCAT_8_5_31/LICENSE Apache 2.0
    - tomcat-embed-core-8.5.31.jar
    - tomcat-embed-el-8.5.31.jar
    - tomcat-embed-websocket-8.5.31.jar

    * beanvalidation: beanvalidation-api 2.0.1.final https://github.com/beanvalidation/beanvalidation-api/tree/2.0.1.Final Apache 2.0
    - validation-api-2.0.1.Final.jar

    * Apache: zookeeper 3.5.4 https://raw.githubusercontent.com/apache/zookeeper/release-3.5.4/LICENSE.txt Apache 2.0
    - zookeeper-3.5.4-beta.jar

    * josdejong: jsoneditor 5.26.2 https://raw.githubusercontent.com/josdejong/jsoneditor/v5.26.2/LICENSE Apache 2.0
    * Google: fonts https://raw.githubusercontent.com/google/fonts/master/apache/roboto/LICENSE.txt Apache 2.0
    * Google: material design icons 3.0.1 https://raw.githubusercontent.com/google/material-design-icons/3.0.1/LICENSE Apache 2.0
    * brettwooldridge: HikariCP 2.7.9 https://raw.githubusercontent.com/brettwooldridge/HikariCP/HikariCP-2.7.9/LICENSE Apache 2.0
    - HikariCP-2.7.9.jar

    * wildfly jandex 2.0.3.Final https://raw.githubusercontent.com/wildfly/jandex/2.0.3.Final/LICENSE.txt Apache 2.0
    - jandex-2.0.3.Final.jar

    * Apache commons-logging 1.2 https://raw.githubusercontent.com/apache/commons-logging/LOGGING_1_2/LICENSE.txt Apache 2.0
    - commons-logging-1.2.jar

    * RuedigerMoeller fst 2.48-jdk-6 https://raw.githubusercontent.com/RuedigerMoeller/fast-serialization/jdk-6/LICENSE.md Apache 2.0
    - fst-2.48-jdk-6.jar

    * dubbo hessian-lite 3.2.3 https://raw.githubusercontent.com/dubbo/hessian-lite/v3.2.4/LICENSE Apache 2.0
    - hessian-lite-3.2.3.jar

    * jdereg java-util 1.9.0 https://raw.githubusercontent.com/jdereg/java-util/master/LICENSE Apache 2.0
    - java-util-1.9.0.jar

    * jdereg json-io 2.5.1 https://raw.githubusercontent.com/jdereg/json-io/2.5.1.201402192244/LICENSE Apache 2.0
    - json-io-2.5.1.jar

    * magro kryo-serializers 0.42 https://raw.githubusercontent.com/magro/kryo-serializers/kryo-serializers-0.42/LICENCE.txt Apache 2.0
    - kryo-serializers-0.42.jar

    * easymock objenesis 2.6 https://raw.githubusercontent.com/easymock/objenesis/2.6/LICENSE.txt Apache 2.0
    - objenesis-2.6.jar

========================================================================
MIT licenses
========================================================================

The following components are provided under the MIT License. See project link for details.
The text of each license is also included at licenses/LICENSE-[project].

    * jedis: 2.9.0 https://raw.githubusercontent.com/xetorthio/jedis/jedis-2.9.0/LICENSE.txt MIT
    - jedis-2.9.0.jar

    * slf4j: jul-to-slf4j 1.7.25 https://raw.githubusercontent.com/qos-ch/slf4j/v_1.7.25/LICENSE.txt MIT
    - jul-to-slf4j-1.7.25.jar
    - jcl-over-slf4j-1.7.25.jar

    * qos-ch: slf4j 1.7.25 https://raw.githubusercontent.com/qos-ch/slf4j/v_1.7.25/LICENSE.txt MIT
    - slf4j-api-1.7.25.jar

    * axios: axios 0.18.0 https://raw.githubusercontent.com/axios/axios/v0.18.0/LICENSE MIT
    * thlorenz: brace 0.11.0 https://raw.githubusercontent.com/thlorenz/brace/v0.11.0/LICENSE MIT
    * nodeca: js-yaml 3.12.0 https://raw.githubusercontent.com/nodeca/js-yaml/3.12.0/LICENSE MIT
    * vuejs: vue 2.5.2 https://raw.githubusercontent.com/vuejs/vue/v2.5.2/LICENSE MIT
    * Inndy: vue-clipboard2 0.2.1 https://raw.githubusercontent.com/Inndy/vue-clipboard2/v0.2.1/LICENSE MIT
    * kazupon: vue-i18n 8.6.0 https://raw.githubusercontent.com/kazupon/vue-i18n/v8.6.0/LICENSE MIT
    * vuejs: vue-router 3.0.1 https://raw.githubusercontent.com/vuejs/vue-router/v3.0.1/LICENSE MIT
    * vuetifyjs: vuetify 1.2.2 https://raw.githubusercontent.com/vuetifyjs/vuetify/v1.2.2/LICENSE MIT
    * vuejs: vuex 3.0.1 https://raw.githubusercontent.com/vuejs/vuex/v3.0.1/LICENSE MIT
    * lodash: lodash 4.17.11 https://raw.githubusercontent.com/lodash/lodash/4.17.11/LICENSE MIT


========================================================================
EPL v1.0 and LGPL 2.1
========================================================================
The following components are provided under the EPL v1.0 and LGPL 2.1. See project link for details.
The text of each license is also included at licenses/LICENSE-[project].

    * qos-ch: logback 1.2.3 https://raw.githubusercontent.com/qos-ch/logback/v_1.2.3/LICENSE.txt  EPL v1.0 and LGPL 2.1
    - logback-classic-1.2.3.jar
    - logback-core-1.2.3.jar

========================================================================
LGPL 2.1
========================================================================
The following components are provided under the EPL v1.0 and LGPL 2.1. See project link for details.
The text of each license is also included at licenses/LICENSE-[project].

    * hibernate: hibernate-commons-annotations 5.0.1.Final https://raw.githubusercontent.com/hibernate/hibernate-commons-annotations/5.0.1.Final/lgpl.txt LGPL 2.1
    - hibernate-commons-annotations-5.0.1.Final.jar

    * hibernate: hibernate-orm 5.2.17.Final   https://raw.githubusercontent.com/hibernate/hibernate-orm/5.2.17/lgpl.txt LGPL 2.1
    - hibernate-core-5.2.17.Final.jar


========================================================================
EPL v1.0
========================================================================
The following components are provided under the EPL v1.0. See project link for details.
The text of each license is also included at licenses/LICENSE-[project].

    * Eclipse: AspectJ Weaver 1.8.3 http://www.eclipse.org/legal/epl-v10.html  EPL v1.0
    - aspectjweaver-1.8.13.jar

========================================================================
EDL v1.0
========================================================================
The following components are provided under the EDL v1.0. See project link for details.
The text of each license is also included at licenses/LICENSE-[project].

========================================================================

    * Hibernate: hibernate-jpa-api https://raw.githubusercontent.com/hibernate/hibernate-jpa-api/master/license.txt EDL v1.0
    - hibernate-jpa-2.1-api-1.0.0.Final.jar

CDDL 1.1
========================================================================
The following components are provided under the CDDL 1.1. See project link for details.
The text of each license is also included at licenses/LICENSE-[project].

    * javaee: javax.annotation 1.3.2 https://raw.githubusercontent.com/javaee/javax.annotation/1.3.2/LICENSE CDDL 1.1
    - javax.annotation-api-1.3.2.jar

    * javaee: javax.transaction 1.2 https://raw.githubusercontent.com/javaee/javax.transaction/master/LICENSE CDDL 1.1
    - javax.transaction-api-1.2.jar

========================================================================
BSD licenses
========================================================================
The following components are provided under a BSD license. See project link for details.
The text of each license is also included at licenses/LICENSE-[project].

    * adaltas: node-http-status 1.2.0 https://github.com/adaltas/node-http-status/tree/v1.2.0 BSD
    * antlr: antlr 2.7.7 http://www.antlr.org/license.html BSD
    - antlr-2.7.7.jar
    * dom4j: dom4j 1.6.1 https://raw.githubusercontent.com/dom4j/dom4j/dom4j_1_6_1/LICENSE.txt BSD
    - dom4j-1.6.1.jar
    * ow2: asm 5.0.4 https://gitlab.ow2.org/asm/asm/raw/ASM_5_0_4/LICENSE.txt BSD
    - asm-5.0.4.jar
    * EsotericSoftware kryo 4.0.1 https://raw.githubusercontent.com/EsotericSoftware/kryo/kryo-parent-4.0.1/license.txt BSD
    - kryo-4.0.1.jar
    * EsotericSoftware minlog 1.3.0 https://raw.githubusercontent.com/EsotericSoftware/minlog/minlog-1.3.0/license.txt BSD
    - minlog-1.3.0.jar
    * EsotericSoftware reflectasm 1.11.3 https://raw.githubusercontent.com/EsotericSoftware/reflectasm/reflectasm-1.11.3/license.txt BSD
    - reflectasm-1.11.3.jar

========================================================================
Apache 2.0, LGPL 2.1 and MPL 1.1
========================================================================
The following components are provided under Apache 2.0, LGPL 2.1 and MPL 1.1. See project link for details.
The text of each license is also included at licenses/LICENSE-[project].
   * javassist: javassist 3.20.0-ga https://raw.githubusercontent.com/jboss-javassist/javassist/rel_3_20_0_ga/License.html Apache 2.0, LGPL 2.1 and MPL 1.1
   - javassist-3.20.0-GA.jar


