                                 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 Gearpump subcomponents:

   Apache Gearpump includes a number of subcomponents with
   separate copyright notices and license terms. Your use of the source
   code for these subcomponents is subject to the terms and
   conditions of the following licenses. 

========================================================================
BSD licenses
The text of each license is also included at licenses/LICENSE-[project].txt.
See project link for details.
========================================================================
com.jcraft:jsch:0.1.42 - http://www.jcraft.com/jsch/.
For details, see licenses/LICENSE-jsch.txt.

com.thoughtworks.paranamer:paranamer:2.3 - https://github.com/paul-hammant/paranamer.
For details, see licenses/LICENSE-paranamer.txt.

jline:jline:0.9.94 - http://jline.sourceforge.net/.
For details, see licenses/LICENSE-jline.txt.

net.sourceforge.htmlcleaner:htmlcleaner:2.2 - http://htmlcleaner.sourceforge.net/download.php.
For details, see licenses/LICENSE-htmlcleaner.txt.

asm.asm:3.1 - http://asm.ow2.org/.
For details, see licenses/LICENSE-asm.txt.

org.ow2.asm:asm:4.0 - http://asm.ow2.org/.
For details, see licenses/LICENSE-asm.txt.

org.ow2.asm:asm:5.0.3 - http://asm.ow2.org/.
For details, see licenses/LICENSE-asm.txt.

org.scala-stm:scala-stm_2.11:0.7 - https://nbronson.github.io/scala-stm/releases.html.
For details, see licenses/LICENSE-scala-stm.txt.

xmlenc:xmlenc:0.52 - http://xmlenc.sourceforge.net/.
For details, see licenses/LICENSE-xmlenc.txt.

========================================================================
BSD 3-clause licenses
The text of each license is also included at licenses/LICENSE-[project].txt.
See project link for details.
========================================================================
org.scala-lang:scala-reflect:2.11.8 - http://www.scala-lang.org/download/#License.
For details, see licenses/LICENSE-scala-reflect.txt.

org.scala-lang.modules:scala-java8-compat_2.11:0.7.0 - http://www.scala-lang.org/download/#License.
For details, see licenses/LICENSE-scala-java8-compat.txt.

org.scala-lang.modules:scala-parser-combinators_2.11:1.0.2 - http://www.scala-lang.org/download/#License.
For details, see licenses/LICENSE-scala-parser-combinators.txt.

org.scala-lang.modules:scala-parser-combinators_2.11:1.0.4 - http://www.scala-lang.org/download/#License.
For details, see licenses/LICENSE-scala-parser-combinators.txt.

org.scala-lang.modules:scala-xml_2.11:1.0.2 - http://www.scala-lang.org/download/#License.
For details, see licenses/LICENSE-scala-xml.txt.

org.webjars:d3js:3.5.6 - https://d3js.org/.
For details, see licenses/LICENSE-d3js.txt.

========================================================================
New BSD licenses
The text of each license is also included at licenses/LICENSE-[project].txt.
See project link for details.
========================================================================
com.esotericsoftware.kryo:kryo:2.21 - https://github.com/EsotericSoftware/kryo/.
For details, see licenses/LICENSE-kyro.txt.

com.esotericsoftware.minlog:minlog:1.2 - https://github.com/EsotericSoftware/minlog.
For details, see licenses/LICENSE-minlog.txt.

com.esotericsoftware.reflectasm:reflectasm:1.07 - https://github.com/EsotericSoftware/reflectasm.
For details, see licenses/LICENSE-reflectasm.txt.

com.esotericsoftware:kryo:3.0.3 - https://github.com/EsotericSoftware/kryo/.
For details, see licenses/LICENSE-kryo.txt.

com.esotericsoftware:minlog:1.3.0 - https://github.com/EsotericSoftware/minlog.
For details, see licenses/LICENSE-minlog.txt.

com.esotericsoftware:reflectasm:1.10.1 - https://github.com/EsotericSoftware/reflectasm.
For details, see licenses/LICENSE-reflectasm.txt.

com.google.protobuf:protobuf-java:2.5.0 - https://developers.google.com/protocol-buffers/.
For details, see licenses/LICENSE-protobuf-java.txt.

========================================================================
CC BY 3.0 license
The text of each license is also included at licenses/LICENSE-[project].txt.
See project link for details.
========================================================================
org.webjars:font-awesome:4.5.0 - http://fontawesome.io/.
For details, see licenses/LICENSE-font-awesome.txt.
 
========================================================================
CC0 license
The text of each license is also included at licenses/LICENSE-[project].txt.
See project link for details.
========================================================================
org.reactivestreams:reactive-streams:1.0.0 - http://www.reactive-streams.org/.
For details, see licenses/LICENSE-reactive-streams.txt.

========================================================================
CDDL 1.1 license
The text of each license is also included at licenses/LICENSE-[project].txt.
See project link for details.
========================================================================
com.sun.jersey.contribs:jersey-guice:1.9 - https://jersey.java.net/.
For details, see licenses/LICENSE-jersey.txt.

com.sun.jersey:jersey-client:1.9 - https://jersey.java.net/.
For details, see licenses/LICENSE-jersey.txt.

com.sun.jersey:jersey-core:1.9 - https://jersey.java.net/.
For details, see licenses/LICENSE-jersey.txt.

com.sun.jersey:jersey-json:1.9 - https://jersey.java.net/.
For details, see licenses/LICENSE-jersey.txt.

com.sun.jersey:jersey-server:1.9 - https://jersey.java.net/.
For details, see licenses/LICENSE-jersey.txt.

com.sun.xml.bind:jaxb-impl:2.2.3-1 - https://jaxb.java.net/.
For details, see licenses/LICENSE-jaxb-impl.txt.

javax.xml.bind:jaxb-api:2.2.2 - https://jaxb.java.net/.
For details, see licenses/LICENSE-jaxb-api.txt.

org.jvnet.mimepull:mimepull:1.9.4 - https://mimepull.java.net/.
For details, see licenses/LICENSE-minepull.txt.

========================================================================
Common Development and Distribution License (CDDL) v1.0
The text of each license is also included at licenses/LICENSE-[project].txt.
See project link for details.
========================================================================
javax.activation:activation:1.1 - http://www.oracle.com/technetwork/java/index.html.
For details, see licenses/LICENSE-activation.txt.

javax.servlet:servlet-api:2.5 - http://www.oracle.com/technetwork/java/index.html.
For details, see licenses/LICENSE-servlet-api.txt.

javax.xml.stream:stax-api:1.0-2 - https://sjsxp.java.net/.
For details, see licenses/LICENSE-stax-api.txt.

javax.servlet.jsp:jsp-api:2.1 - http://www.oracle.com/technetwork/java/index.html
For details, see licenses/LICENSE-jsp-api.txt.

========================================================================
Common Public License Version 1.0
The text of each license is also included at licenses/LICENSE-[project].txt.
See project link for details.
========================================================================
junit:junit:3.8.1 - http://junit.org.
For details, see licenses/LICENSE-junit.txt.

========================================================================
Eclipse Public License 1.0
The text of each license is also included at licenses/LICENSE-[project].txt.
See project link for details.
========================================================================
org.clojure:clojure:1.6.0 - http://clojure.org/.
For details, see licenses/LICENSE-clojure.txt.
 
========================================================================
MIT licenses
The text of each license is also included at licenses/LICENSE-[project].txt.
See project link for details.
========================================================================
com.github.scribejava:scribejava-apis:2.4.0 - https://github.com/scribejava/scribejava.
For details, see licenses/LICENSE-scribejava-apis.txt.

com.github.scribejava:scribejava-core:2.4.0 - https://github.com/scribejava/scribejava.
For details, see licenses/LICENSE-scribejava-core.txt.

com.lihaoyi:derive_2.11:0.3.4 - https://github.com/lihaoyi/upickle.
For details, see licenses/LICENSE-derive.txt.

com.lihaoyi:upickle_2.11:0.3.4 - https://github.com/lihaoyi/upickle.
For details, see licenses/LICENSE-upickle.txt.

org.jruby.jcodings:jcodings:1.0.8 - https://github.com/jruby/jcodings.
For details, see licenses/LICENSE-jcodings.txt.

org.jruby.joni:joni:2.1.2 - https://github.com/jruby/joni.
For details, see licenses/LICENSE-joni.txt.

org.slf4j:slf4j-api:1.7.16 - http://www.slf4j.org/.
For details, see licenses/LICENSE-slf4j.txt.

org.slf4j:slf4j-api:1.7.12 - http://www.slf4j.org/.
For details, see licenses/LICENSE-slf4j.txt.

org.slf4j:slf4j-log4j12:1.7.16 - http://www.slf4j.org/.
For details, see licenses/LICENSE-slf4j.txt.

org.spire-math:jawn-parser_2.11:0.7.0 - https://github.com/non/jawn/.
For details, see licenses/LICENSE-jawn-parser.txt.

org.webjars:angular-ui-router:0.2.15 - https://github.com/angular-ui/ui-router.
For details, see licenses/LICENSE-angular-ui-router.txt.

org.webjars:angularjs:1.4.9 - https://angularjs.org.
For details, see licenses/LICENSE-angular.txt.

org.webjars.bower:angular-loading-bar:0.8.0 - https://chieffancypants.github.io/angular-loading-bar/.
For details, see licenses/LICENSE-angular-loading-bar.txt.

org.webjars.bower:angular-motion:0.4.3 - http://www.webjars.org/.
For details, see licenses/LICENSE-angular-motion.txt.

org.webjars.bower:angular-smart-table:2.1.6 - https://lorenzofox3.github.io/smart-table-website/.
For details, see licenses/LICENSE-angular-smart-table.txt.

org.webjars.bower:angular-strap:2.3.5 - http://mgcrea.github.io/angular-strap/.
For details, see licenses/LICENSE-angular-strap.txt.

org.webjars.bower:bootstrap:0.3.3.5 - https://getbootstrap.com/.
For details, see licenses/LICENSE-bootstrap.txt.

org.webjars.bower:bootstrap-additions:0.3.1 - https://github.com/mgcrea/bootstrap-additions.
For details, see licenses/LICENSE-bootstrap-additions.txt.

org.webjars.bower:clipboard.js:0.1.1 - https://clipboardjs.com/.
For details, see licenses/LICENSE-clipboard.js.txt.

org.webjars.bower:ng-file-upload:5.0.9 - https://github.com/danialfarid/ng-file-upload
For details, see licenses/LICENSE-ng-file-upload.txt.

org.webjars:lodash:3.10.1 - https://lodash.com/.
For details, see licenses/LICENSE-lodash.txt.

org.webjars:jquery:2.2.0 - https://jquery.com/.
For details, see licenses/LICENSE-jquery.txt.

org.webjars:jquery-cookie:1.4.1 - https://github.com/js-cookie/js-cookie.
For details, see licenses/LICENSE-jquery-cookie.txt.

org.webjars:momentjs:2.10.6 - http://momentjs.com/.
For details, see licenses/LICENSE-momentjs.txt.

org.webjars.npm:angular-touch:1.5.0 - http://angularjs.org.
For details, see licenses/LICENSE-angular-touch.txt.

org.webjars.npm:ui-select:0.14.2 - http://angular-ui.github.io/ui-select/.
For details, see licenses/LICENSE-ui-select.txt.

redis.clients:jedis:2.9.0 - https://github.com/xetorthio/jedis.
For details, see licenses/LICENSE-jedis.txt.

net.sf.jopt-simple:jopt-simple:3.2 - https://pholser.github.io/jopt-simple/.
For details, see licenses/LICENSE-jopt-simple.txt.

========================================================================
Public Domain
The text of each license is also included at licenses/LICENSE-[project].txt.
See project link for details.
========================================================================
aopalliance:aopalliance:1.0 - http://aopalliance.sourceforge.net/
For details, see licenses/LICENSE-aopalliance.txt.

org.tukaani:xz:1.0 - http://tukaani.org/xz/java.html
For details, see licenses/LICENSE-xz.txt.