diff --git a/hyracks/hyracks-examples/btree-example/btreeclient/src/main/assembly/binary-assembly.xml b/hyracks/hyracks-examples/btree-example/btreeclient/src/main/assembly/binary-assembly.xml
index 9c53c81..5d1a191 100644
--- a/hyracks/hyracks-examples/btree-example/btreeclient/src/main/assembly/binary-assembly.xml
+++ b/hyracks/hyracks-examples/btree-example/btreeclient/src/main/assembly/binary-assembly.xml
@@ -38,11 +38,17 @@
       <directory>target/classes/META-INF</directory>
       <outputDirectory>.</outputDirectory>
       <includes>
-        <include>LICENSE*</include>
-        <include>NOTICE*</include>
         <include>DISCLAIMER*</include>
         <include>DEPENDENCIES*</include>
       </includes>
     </fileSet>
+    <fileSet>
+      <directory>src/main/licenses</directory>
+      <outputDirectory>.</outputDirectory>
+      <includes>
+        <include>LICENSE*</include>
+        <include>NOTICE*</include>
+      </includes>
+    </fileSet>
   </fileSets>
 </assembly>
diff --git a/hyracks/hyracks-examples/btree-example/btreeclient/src/main/licenses/LICENSE b/hyracks/hyracks-examples/btree-example/btreeclient/src/main/licenses/LICENSE
new file mode 100644
index 0000000..c4c3eea
--- /dev/null
+++ b/hyracks/hyracks-examples/btree-example/btreeclient/src/main/licenses/LICENSE
@@ -0,0 +1,844 @@
+
+                                 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.
+
+
+   ASTERIXDB COMPONENTS:
+
+   AsterixDB 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 condition of the following
+   licenses.
+
+   Components under Apache License 2.0 are as follows:
+
+     - HttpClient (http://hc.apache.org/httpcomponents-client)
+       lib/httpclient-4.3.jar
+     - HttpCore (http://hc.apache.org/httpcomponents-core-ga)
+       lib/httpcore-4.3.jar
+     - Jetty :: Continuation (http://www.eclipse.org/jetty/jetty-continuation)
+       lib/jetty-continuation-8.0.0.RC0.jar
+     - Jetty :: Http Utility (http://www.eclipse.org/jetty/jetty-http)
+       lib/jetty-http-8.0.0.RC0.jar
+     - Jetty :: IO Utility (http://www.eclipse.org/jetty/jetty-io)
+       lib/jetty-io-8.0.0.RC0.jar
+     - Jetty :: Security (http://www.eclipse.org/jetty/jetty-security)
+       lib/jetty-security-8.0.0.RC0.jar
+     - Jetty :: Server Core (http://www.eclipse.org/jetty)
+       lib/jetty-server-8.0.0.RC0.jar
+     - Jetty :: Servlet Handling (http://www.eclipse.org/jetty/jetty-servlet)
+       lib/jetty-servlet-8.0.0.RC0.jar
+     - Jetty :: Utilities (http://www.eclipse.org/jetty/jetty-util)
+       lib/jetty-util-8.0.0.RC0.jar
+     - Jetty :: Webapp Application Support (http://www.eclipse.org/jetty/jetty-webapp)
+       lib/jetty-webapp-8.0.0.RC0.jar
+     - Jetty :: XML utilities (http://www.eclipse.org/jetty/jetty-xml)
+       lib/jetty-xml-8.0.0.RC0.jar
+     - Servlet API (http://www.eclipse.org/jetty/jetty-parent/servlet-api)
+       lib/servlet-api-3.0.20100224.jar
+     - Wicket Core (http://wicket.apache.org/wicket-core/wicket-core)
+       lib/wicket-core-1.5.2.jar
+     - Wicket Request (http://maven.apache.org)
+       lib/wicket-request-1.5.2.jar
+     - Wicket Util (http://maven.apache.org)
+       lib/wicket-util-1.5.2.jar
+     - Apache Commons Codec (http://commons.apache.org/codec/commons-codec)
+       lib/commons-codec-1.4.jar
+     - Commons IO (http://commons.apache.org/io/)
+       lib/commons-io-2.4.jar
+     - Apache Commons Logging (http://commons.apache.org/logging)
+       lib/commons-logging-1.1.1.jar
+     - Commons Lang (http://commons.apache.org/lang/)
+       lib/commons-lang3-3.1.jar
+     - Cglib
+       contained within lib/mockitio-all-2.0.2-beta.jar
+
+   ===
+
+   Component(s):
+   - Java Servlet API (http://servlet-spec.java.net)
+     lib/javax.servlet-3.0.20100224.jar
+
+
+   are available under the CDDL 1.0
+   --
+      COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0
+
+      1. Definitions.
+
+      1.1. “Contributor” means each individual or entity that creates or contributes to the creation of Modifications.
+
+      1.2. “Contributor Version” means the combination of the Original Software, prior Modifications used by a Contributor (if any), and the Modifications made by that particular Contributor.
+
+      1.3. “Covered Software” means (a) the Original Software, or (b) Modifications, or (c) the combination of files containing Original Software with files containing Modifications, in each case including portions thereof.
+
+      1.4. “Executable” means the Covered Software in any form other than Source Code.
+
+      1.5. “Initial Developer” means the individual or entity that first makes Original Software available under this License.
+
+      1.6. “Larger Work” means a work which combines Covered Software or portions thereof with code not governed by the terms of this License.
+
+      1.7. “License” means this document.
+
+      1.8. “Licensable” means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein.
+
+      1.9. “Modifications” means the Source Code and Executable form of any of the following:
+
+      A. Any file that results from an addition to, deletion from or modification of the contents of a file containing Original Software or previous Modifications;
+
+      B. Any new file that contains any part of the Original Software or previous Modification; or
+
+      C. Any new file that is contributed or otherwise made available under the terms of this License.
+
+      1.10. “Original Software” means the Source Code and Executable form of computer software code that is originally released under this License.
+
+      1.11. “Patent Claims” means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor.
+
+      1.12. “Source Code” means (a) the common form of computer software code in which modifications are made and (b) associated documentation included in or with such code.
+
+      1.13. “You” (or “Your”) means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, “You” includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, “control” means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity.
+
+      2. License Grants.
+
+      2.1. The Initial Developer Grant.
+
+      Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, the Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license:
+
+      (a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer, to use, reproduce, modify, display, perform, sublicense and distribute the Original Software (or portions thereof), with or without Modifications, and/or as part of a Larger Work; and
+
+      (b) under Patent Claims infringed by the making, using or selling of Original Software, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Software (or portions thereof).
+
+      (c) The licenses granted in Sections 2.1(a) and (b) are effective on the date Initial Developer first distributes or otherwise makes the Original Software available to a third party under the terms of this License.
+
+      (d) Notwithstanding Section 2.1(b) above, no patent license is granted: (1) for code that You delete from the Original Software, or (2) for infringements caused by: (i) the modification of the Original Software, or (ii) the combination of the Original Software with other software or devices.
+
+      2.2. Contributor Grant.
+
+      Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license:
+
+      (a) under intellectual property rights (other than patent or trademark) Licensable by Contributor to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof), either on an unmodified basis, with other Modifications, as Covered Software and/or as part of a Larger Work; and
+
+      (b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: (1) Modifications made by that Contributor (or portions thereof); and (2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination).
+
+      (c) The licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first distributes or otherwise makes the Modifications available to a third party.
+
+      (d) Notwithstanding Section 2.2(b) above, no patent license is granted: (1) for any code that Contributor has deleted from the Contributor Version; (2) for infringements caused by: (i) third party modifications of Contributor Version, or (ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or (3) under Patent Claims infringed by Covered Software in the absence of Modifications made by that Contributor.
+
+      3. Distribution Obligations.
+
+      3.1. Availability of Source Code.
+
+      Any Covered Software that You distribute or otherwise make available in Executable form must also be made available in Source Code form and that Source Code form must be distributed only under the terms of this License. You must include a copy of this License with every copy of the Source Code form of the Covered Software You distribute or otherwise make available. You must inform recipients of any such Covered Software in Executable form as to how they can obtain such Covered Software in Source Code form in a reasonable manner on or through a medium customarily used for software exchange.
+
+      3.2. Modifications.
+
+      The Modifications that You create or to which You contribute are governed by the terms of this License. You represent that You believe Your Modifications are Your original creation(s) and/or You have sufficient rights to grant the rights conveyed by this License.
+
+      3.3. Required Notices.
+
+      You must include a notice in each of Your Modifications that identifies You as the Contributor of the Modification. You may not remove or alter any copyright, patent or trademark notices contained within the Covered Software, or any notices of licensing or any descriptive text giving attribution to any Contributor or the Initial Developer.
+
+      3.4. Application of Additional Terms.
+
+      You may not offer or impose any terms on any Covered Software in Source Code form that alters or restricts the applicable version of this License or the recipients’ rights hereunder. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, you may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear that any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer.
+
+      3.5. Distribution of Executable Versions.
+
+      You may distribute the Executable form of the Covered Software under the terms of this License or under the terms of a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable form does not attempt to limit or alter the recipient’s rights in the Source Code form from the rights set forth in this License. If You distribute the Covered Software in Executable form under a different license, You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer.
+
+      3.6. Larger Works.
+
+      You may create a Larger Work by combining Covered Software with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Software.
+
+      4. Versions of the License.
+
+      4.1. New Versions.
+
+      Sun Microsystems, Inc. is the initial license steward and may publish revised and/or new versions of this License from time to time. Each version will be given a distinguishing version number. Except as provided in Section 4.3, no one other than the license steward has the right to modify this License.
+
+      4.2. Effect of New Versions.
+
+      You may always continue to use, distribute or otherwise make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. If the Initial Developer includes a notice in the Original Software prohibiting it from being distributed or otherwise made available under any subsequent version of the License, You must distribute and make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. Otherwise, You may also choose to use, distribute or otherwise make the Covered Software available under the terms of any subsequent version of the License published by the license steward.
+
+      4.3. Modified Versions.
+
+      When You are an Initial Developer and You want to create a new license for Your Original Software, You may create and use a modified version of this License if You: (a) rename the license and remove any references to the name of the license steward (except to note that the license differs from this License); and (b) otherwise make it clear that the license contains terms which differ from this License.
+
+      5. DISCLAIMER OF WARRANTY.
+
+      COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN “AS IS” BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+      6. TERMINATION.
+
+      6.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive.
+
+      6.2. If You assert a patent infringement claim (excluding declaratory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You assert such claim is referred to as “Participant”) alleging that the Participant Software (meaning the Contributor Version where the Participant is a Contributor or the Original Software where the Participant is the Initial Developer) directly or indirectly infringes any patent, then any and all rights granted directly or indirectly to You by such Participant, the Initial Developer (if the Initial Developer is not the Participant) and all Contributors under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively and automatically at the expiration of such 60 day notice period, unless if within such 60 day period You withdraw Your claim with respect to the Participant Software against such Participant either unilaterally or pursuant to a written agreement with Participant.
+
+      6.3. In the event of termination under Sections 6.1 or 6.2 above, all end user licenses that have been validly granted by You or any distributor hereunder prior to termination (excluding licenses granted to You by any distributor) shall survive termination.
+
+      7. LIMITATION OF LIABILITY.
+
+      UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOST PROFITS, LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY’S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+      8. U.S. GOVERNMENT END USERS.
+
+      The Covered Software is a “commercial item,” as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of “commercial computer software” (as that term is defined at 48 C.F.R. § 252.227-7014(a)(1)) and “commercial computer software documentation” as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Software with only those rights set forth herein. This U.S. Government Rights clause is in lieu of, and supersedes, any other FAR, DFAR, or other clause or provision that addresses Government rights in computer software under this License.
+
+      9. MISCELLANEOUS.
+
+      This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by the law of the jurisdiction specified in a notice contained within the Original Software (except to the extent applicable law, if any, provides otherwise), excluding such jurisdiction’s conflict-of-law provisions. Any litigation relating to this License shall be subject to the jurisdiction of the courts located in the jurisdiction and venue specified in a notice contained within the Original Software, with the losing party responsible for costs, including, without limitation, court costs and reasonable attorneys’ fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. You agree that You alone are responsible for compliance with the United States export administration regulations (and the export control laws and regulation of any other countries) when You use, distribute or otherwise make available any Covered Software.
+
+      10. RESPONSIBILITY FOR CLAIMS.
+
+      As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability.
+
+      NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL)
+
+      The code released under the CDDL shall be governed by the laws of the State of California (excluding conflict-of-law provisions). Any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California and the state courts of the State of California, with venue lying in Santa Clara County, California.
+
+
+   ===
+
+   Component(s):
+
+   - JUnit (http://junit.org)
+     lib/junit-4.11.jar
+
+   Are available under the CPL 1.0:
+
+   --
+
+      Common Public License Version 1.0
+      THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON PUBLIC
+      LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM
+      CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+      1. DEFINITIONS
+
+      "Contribution" means:
+
+      a) in the case of the initial Contributor, the initial code and
+      documentation distributed under this Agreement, and
+
+      b) in the case of each subsequent Contributor:
+
+      i) changes to the Program, and
+
+      ii) additions to the Program;
+
+      where such changes and/or additions to the Program originate from and are
+      distributed by that particular Contributor. A Contribution 'originates' from a
+      Contributor if it was added to the Program by such Contributor itself or anyone
+      acting on such Contributor's behalf. Contributions do not include additions to
+      the Program which: (i) are separate modules of software distributed in
+      conjunction with the Program under their own license agreement, and (ii) are not
+      derivative works of the Program.
+
+      "Contributor" means any person or entity that distributes the Program.
+
+      "Licensed Patents " mean patent claims licensable by a Contributor which are
+      necessarily infringed by the use or sale of its Contribution alone or when
+      combined with the Program.
+
+      "Program" means the Contributions distributed in accordance with this Agreement.
+
+      "Recipient" means anyone who receives the Program under this Agreement,
+      including all Contributors.
+
+      2. GRANT OF RIGHTS
+
+      a) Subject to the terms of this Agreement, each Contributor hereby grants
+      Recipient a non-exclusive, worldwide, royalty-free copyright license to
+      reproduce, prepare derivative works of, publicly display, publicly perform,
+      distribute and sublicense the Contribution of such Contributor, if any, and such
+      derivative works, in source code and object code form.
+
+      b) Subject to the terms of this Agreement, each Contributor hereby grants
+      Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed
+      Patents to make, use, sell, offer to sell, import and otherwise transfer the
+      Contribution of such Contributor, if any, in source code and object code form.
+      This patent license shall apply to the combination of the Contribution and the
+      Program if, at the time the Contribution is added by the Contributor, such
+      addition of the Contribution causes such combination to be covered by the
+      Licensed Patents. The patent license shall not apply to any other combinations
+      which include the Contribution. No hardware per se is licensed hereunder.
+
+      c) Recipient understands that although each Contributor grants the licenses
+      to its Contributions set forth herein, no assurances are provided by any
+      Contributor that the Program does not infringe the patent or other intellectual
+      property rights of any other entity. Each Contributor disclaims any liability to
+      Recipient for claims brought by any other entity based on infringement of
+      intellectual property rights or otherwise. As a condition to exercising the
+      rights and licenses granted hereunder, each Recipient hereby assumes sole
+      responsibility to secure any other intellectual property rights needed, if any.
+      For example, if a third party patent license is required to allow Recipient to
+      distribute the Program, it is Recipient's responsibility to acquire that license
+      before distributing the Program.
+
+      d) Each Contributor represents that to its knowledge it has sufficient
+      copyright rights in its Contribution, if any, to grant the copyright license set
+      forth in this Agreement.
+
+      3. REQUIREMENTS
+
+      A Contributor may choose to distribute the Program in object code form under its
+      own license agreement, provided that:
+
+      a) it complies with the terms and conditions of this Agreement; and
+
+      b) its license agreement:
+
+      i) effectively disclaims on behalf of all Contributors all warranties and
+      conditions, express and implied, including warranties or conditions of title and
+      non-infringement, and implied warranties or conditions of merchantability and
+      fitness for a particular purpose;
+
+      ii) effectively excludes on behalf of all Contributors all liability for
+      damages, including direct, indirect, special, incidental and consequential
+      damages, such as lost profits;
+
+      iii) states that any provisions which differ from this Agreement are offered
+      by that Contributor alone and not by any other party; and
+
+      iv) states that source code for the Program is available from such
+      Contributor, and informs licensees how to obtain it in a reasonable manner on or
+      through a medium customarily used for software exchange.
+
+      When the Program is made available in source code form:
+
+      a) it must be made available under this Agreement; and
+
+      b) a copy of this Agreement must be included with each copy of the Program.
+
+      Contributors may not remove or alter any copyright notices contained within the
+      Program.
+
+      Each Contributor must identify itself as the originator of its Contribution, if
+      any, in a manner that reasonably allows subsequent Recipients to identify the
+      originator of the Contribution.
+
+      4. COMMERCIAL DISTRIBUTION
+
+      Commercial distributors of software may accept certain responsibilities with
+      respect to end users, business partners and the like. While this license is
+      intended to facilitate the commercial use of the Program, the Contributor who
+      includes the Program in a commercial product offering should do so in a manner
+      which does not create potential liability for other Contributors. Therefore, if
+      a Contributor includes the Program in a commercial product offering, such
+      Contributor ("Commercial Contributor") hereby agrees to defend and indemnify
+      every other Contributor ("Indemnified Contributor") against any losses, damages
+      and costs (collectively "Losses") arising from claims, lawsuits and other legal
+      actions brought by a third party against the Indemnified Contributor to the
+      extent caused by the acts or omissions of such Commercial Contributor in
+      connection with its distribution of the Program in a commercial product
+      offering. The obligations in this section do not apply to any claims or Losses
+      relating to any actual or alleged intellectual property infringement. In order
+      to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+      Contributor in writing of such claim, and b) allow the Commercial Contributor to
+      control, and cooperate with the Commercial Contributor in, the defense and any
+      related settlement negotiations. The Indemnified Contributor may participate in
+      any such claim at its own expense.
+
+      For example, a Contributor might include the Program in a commercial product
+      offering, Product X. That Contributor is then a Commercial Contributor. If that
+      Commercial Contributor then makes performance claims, or offers warranties
+      related to Product X, those performance claims and warranties are such
+      Commercial Contributor's responsibility alone. Under this section, the
+      Commercial Contributor would have to defend claims against the other
+      Contributors related to those performance claims and warranties, and if a court
+      requires any other Contributor to pay any damages as a result, the Commercial
+      Contributor must pay those damages.
+
+      5. NO WARRANTY
+
+      EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED 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. Each
+      Recipient is solely responsible for determining the appropriateness of using and
+      distributing the Program and assumes all risks associated with its exercise of
+      rights under this Agreement, including but not limited to the risks and costs of
+      program errors, compliance with applicable laws, damage to or loss of data,
+      programs or equipment, and unavailability or interruption of operations.
+
+      6. DISCLAIMER OF LIABILITY
+
+      EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY
+      CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+      SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST
+      PROFITS), 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 OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS
+      GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+      7. GENERAL
+
+      If any provision of this Agreement is invalid or unenforceable under applicable
+      law, it shall not affect the validity or enforceability of the remainder of the
+      terms of this Agreement, and without further action by the parties hereto, such
+      provision shall be reformed to the minimum extent necessary to make such
+      provision valid and enforceable.
+
+      If Recipient institutes patent litigation against a Contributor with respect to
+      a patent applicable to software (including a cross-claim or counterclaim in a
+      lawsuit), then any patent licenses granted by that Contributor to such Recipient
+      under this Agreement shall terminate as of the date such litigation is filed. In
+      addition, if Recipient institutes patent litigation against any entity
+      (including a cross-claim or counterclaim in a lawsuit) alleging that the Program
+      itself (excluding combinations of the Program with other software or hardware)
+      infringes such Recipient's patent(s), then such Recipient's rights granted under
+      Section 2(b) shall terminate as of the date such litigation is filed.
+
+      All Recipient's rights under this Agreement shall terminate if it fails to
+      comply with any of the material terms or conditions of this Agreement and does
+      not cure such failure in a reasonable period of time after becoming aware of
+      such noncompliance. If all Recipient's rights under this Agreement terminate,
+      Recipient agrees to cease use and distribution of the Program as soon as
+      reasonably practicable. However, Recipient's obligations under this Agreement
+      and any licenses granted by Recipient relating to the Program shall continue and
+      survive.
+
+      Everyone is permitted to copy and distribute copies of this Agreement, but in
+      order to avoid inconsistency the Agreement is copyrighted and may only be
+      modified in the following manner. The Agreement Steward reserves the right to
+      publish new versions (including revisions) of this Agreement from time to time.
+      No one other than the Agreement Steward has the right to modify this Agreement.
+      IBM is the initial Agreement Steward. IBM may assign the responsibility to serve
+      as the Agreement Steward to a suitable separate entity. Each new version of the
+      Agreement will be given a distinguishing version number. The Program (including
+      Contributions) may always be distributed subject to the version of the Agreement
+      under which it was received. In addition, after a new version of the Agreement
+      is published, Contributor may elect to distribute the Program (including its
+      Contributions) under the new version. Except as expressly stated in Sections
+      2(a) and 2(b) above, Recipient receives no rights or licenses to the
+      intellectual property of any Contributor under this Agreement, whether
+      expressly, by implication, estoppel or otherwise. All rights in the Program not
+      expressly granted under this Agreement are reserved.
+
+      This Agreement is governed by the laws of the State of New York and the
+      intellectual property laws of the United States of America. No party to this
+      Agreement will bring a legal action under this Agreement more than one year
+      after the cause of action arose. Each party waives its rights to a jury trial in
+      any resulting litigation.
+      --
+
+      ===
+      Component(s)
+
+      - SLF4J JCL Binding (http://www.slf4j.org) 
+        lib/slf4j-jcl-1.6.3.jar
+      - SLF4J API Module (http://www.slf4j.org/slf4j-api)
+        lib/slf4j-api-1.6.1.jar
+
+      are provided under the MIT license:
+
+      --
+      Copyright (c) 2004-2013 QOS.ch
+       All rights reserved.
+
+       Permission is hereby granted, free  of charge, to any person obtaining
+       a  copy  of this  software  and  associated  documentation files  (the
+       "Software"), to  deal in  the Software without  restriction, including
+       without limitation  the rights to  use, copy, modify,  merge, publish,
+       distribute,  sublicense, and/or sell  copies of  the Software,  and to
+       permit persons to whom the Software  is furnished to do so, subject to
+       the following conditions:
+       
+       The  above  copyright  notice  and  this permission  notice  shall  be
+       included in all copies or substantial portions of the Software.
+       
+       THE  SOFTWARE IS  PROVIDED  "AS  IS", WITHOUT  WARRANTY  OF ANY  KIND,
+       EXPRESS OR  IMPLIED, INCLUDING  BUT NOT LIMITED  TO THE  WARRANTIES OF
+       MERCHANTABILITY,    FITNESS    FOR    A   PARTICULAR    PURPOSE    AND
+       NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+       LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+       OF CONTRACT, TORT OR OTHERWISE,  ARISING FROM, OUT OF OR IN CONNECTION
+       WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+   --
+
+   ===
+   Component(s):
+   - JSON (JavaScript Object Notation) (http://www.json.org/java/index.html) 
+     lib/json-20090211.jar
+
+   are available under the JSON license:
+
+   --
+      Copyright (c) 2002 JSON.org
+
+      Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+      The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+      The Software shall be used for Good, not Evil.
+
+      THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+   --
+
+
+   ===
+   Component(s):
+
+   - args4j (http://args4j.dev.java.net/args4j/) 
+     lib/args4j-2.0.12.jar
+
+   are available under the MIT License:
+
+   --
+      Copyright (c) 2003, Kohsuke Kawaguchi
+
+      Permission is hereby granted, free of charge, to any person
+      obtaining a copy of this software and associated documentation
+      files (the "Software"), to deal in the Software without
+      restriction, including without limitation the rights to use,
+      copy, modify, merge, publish, distribute, sublicense, and/or sell
+      copies of the Software, and to permit persons to whom the
+      Software is furnished to do so, subject to the following
+      conditions:
+
+      The above copyright notice and this permission notice shall be
+      included in all copies or substantial portions of the Software.
+
+      THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+      EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+      OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+      NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+      HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+      WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+      FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+      OTHER DEALINGS IN THE SOFTWARE.
+   --
+
+   ===
+   Component(s):
+   - Mockito 
+     lib/mockito-all-2.0.2-beta.jar
+
+   are available under the MIT License:
+
+   --
+      The MIT License
+
+      Copyright (c) 2007 Mockito contributors
+
+      Permission is hereby granted, free of charge, to any person obtaining a copy
+      of this software and associated documentation files (the "Software"), to deal
+      in the Software without restriction, including without limitation the rights
+      to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+      copies of the Software, and to permit persons to whom the Software is
+      furnished to do so, subject to the following conditions:
+
+      The above copyright notice and this permission notice shall be included in
+      all copies or substantial portions of the Software.
+
+      THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+      IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+      FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+      AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+      LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+      OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+      THE SOFTWARE.
+  --
+
+   ===
+   Component(s):
+   - Mockito
+     lib/mockito-all-2.0.2-beta.jar
+
+   contain components under the BSD License
+
+   --
+    BSD License
+
+    Copyright (c) 2000-2015 www.hamcrest.org
+    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 Hamcrest 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.
+  --
+
+   ===
+   Component(s):
+   - Mockito
+     lib/mockito-all-2.0.2-beta.jar
+
+   contain components under the BSD License
+
+   --
+    Copyright (c) 2000-2011 INRIA, France Telecom
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+
+    2. 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.
+
+    3. Neither the name of the copyright holders 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.
+  --
+
+   ===
+   Component(s):
+   - Mockito
+     lib/mockito-all-2.0.2-beta.jar
+
+   contain components under the MIT License
+
+   --
+    Copyright (c) 2003-2013, Objenesis Team and all contributors
+
+    Permission is hereby granted, free of charge, to any person obtaining a copy of
+    this software and associated documentation files (the "Software"), to deal in
+    the Software without restriction, including without limitation the rights to
+    use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+    the Software, and to permit persons to whom the Software is furnished to do so,
+    subject to the following conditions:
+
+    The above copyright notice and this permission notice shall be included in all
+    copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+    FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+    COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+    IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+    CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+   --
diff --git a/hyracks/hyracks-examples/btree-example/btreeclient/src/main/licenses/NOTICE b/hyracks/hyracks-examples/btree-example/btreeclient/src/main/licenses/NOTICE
new file mode 100644
index 0000000..7a9806d
--- /dev/null
+++ b/hyracks/hyracks-examples/btree-example/btreeclient/src/main/licenses/NOTICE
@@ -0,0 +1,61 @@
+Apache AsterixDB
+Copyright 2016 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+AsterixDB utilizes many libraries, which come with the following applicable NOTICE(s):
+
+ - lib/hyracks-api-0.2.17-incubating.jar
+
+    hyracks-api
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/hyracks-dataflow-common-0.2.17-incubating.jar
+
+    hyracks-dataflow-common
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/hyracks-dataflow-std-0.2.17-incubating.jar
+
+    hyracks-dataflow-std
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/hyracks-storage-am-btree-0.2.17-incubating.jar
+
+    hyracks-storage-am-btree
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/hyracks-storage-am-common-0.2.17-incubating.jar
+
+    hyracks-storage-am-common
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/hyracks-storage-common-0.2.17-incubating.jar
+
+    hyracks-storage-common
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/hyracks-data-std-0.2.17-incubating.jar
+
+    hyracks-data-std
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/hyracks-ipc-0.2.17-incubating.jar
+
+    hyracks-ipc
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/mockito-all-2.0.2-beta.jar
+
+    Mockito license - MIT.
+
+    Libraries used:
+
+    Cglib - Apache License 2.0
+    ASM - BSD license
+
+    Mockito all distribution:
+
+    Objenesis - MIT license
+    Hamcrest - BSD license
diff --git a/hyracks/hyracks-examples/btree-example/btreeserver/src/main/assembly/binary-assembly.xml b/hyracks/hyracks-examples/btree-example/btreeserver/src/main/assembly/binary-assembly.xml
index e443c5f..e979674 100644
--- a/hyracks/hyracks-examples/btree-example/btreeserver/src/main/assembly/binary-assembly.xml
+++ b/hyracks/hyracks-examples/btree-example/btreeserver/src/main/assembly/binary-assembly.xml
@@ -42,11 +42,17 @@
       <directory>target/classes/META-INF</directory>
       <outputDirectory>.</outputDirectory>
       <includes>
-        <include>LICENSE*</include>
-        <include>NOTICE*</include>
         <include>DISCLAIMER*</include>
         <include>DEPENDENCIES*</include>
       </includes>
     </fileSet>
-  </fileSets>
+     <fileSet>
+      <directory>src/main/licenses</directory>
+      <outputDirectory>.</outputDirectory>
+      <includes>
+        <include>LICENSE*</include>
+        <include>NOTICE*</include>
+      </includes>
+    </fileSet>
+ </fileSets>
 </assembly>
diff --git a/hyracks/hyracks-examples/btree-example/btreeserver/src/main/licenses/LICENSE b/hyracks/hyracks-examples/btree-example/btreeserver/src/main/licenses/LICENSE
new file mode 100644
index 0000000..88410b6
--- /dev/null
+++ b/hyracks/hyracks-examples/btree-example/btreeserver/src/main/licenses/LICENSE
@@ -0,0 +1,842 @@
+
+                                 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.
+
+
+   ASTERIXDB COMPONENTS:
+
+   AsterixDB 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 condition of the following
+   licenses.
+
+   Components under Apache License 2.0 are as follows:
+
+     - HttpClient (http://hc.apache.org/httpcomponents-client)
+       lib/httpclient-4.3.jar
+     - HttpCore (http://hc.apache.org/httpcomponents-core-ga)
+       lib/httpcore-4.3.jar
+     - Jetty :: Continuation (http://www.eclipse.org/jetty/jetty-continuation)
+       lib/jetty-continuation-8.0.0.RC0.jar
+     - Jetty :: Http Utility (http://www.eclipse.org/jetty/jetty-http)
+       lib/jetty-http-8.0.0.RC0.jar
+     - Jetty :: IO Utility (http://www.eclipse.org/jetty/jetty-io)
+       lib/jetty-io-8.0.0.RC0.jar
+     - Jetty :: Security (http://www.eclipse.org/jetty/jetty-security)
+       lib/jetty-security-8.0.0.RC0.jar
+     - Jetty :: Server Core (http://www.eclipse.org/jetty)
+       lib/jetty-server-8.0.0.RC0.jar
+     - Jetty :: Servlet Handling (http://www.eclipse.org/jetty/jetty-servlet)
+       lib/jetty-servlet-8.0.0.RC0.jar
+     - Jetty :: Utilities (http://www.eclipse.org/jetty/jetty-util)
+       lib/jetty-util-8.0.0.RC0.jar
+     - Jetty :: Webapp Application Support (http://www.eclipse.org/jetty/jetty-webapp)
+       lib/jetty-webapp-8.0.0.RC0.jar
+     - Jetty :: XML utilities (http://www.eclipse.org/jetty/jetty-xml)
+       lib/jetty-xml-8.0.0.RC0.jar
+     - Servlet API (http://www.eclipse.org/jetty/jetty-parent/servlet-api)
+       lib/servlet-api-3.0.20100224.jar
+     - Wicket Core (http://wicket.apache.org/wicket-core/wicket-core)
+       lib/wicket-core-1.5.2.jar
+     - Wicket Request (http://maven.apache.org)
+       lib/wicket-request-1.5.2.jar
+     - Wicket Util (http://maven.apache.org)
+       lib/wicket-util-1.5.2.jar
+     - Apache Commons Codec (http://commons.apache.org/codec/commons-codec)
+       lib/commons-codec-1.4.jar
+     - Commons IO (http://commons.apache.org/io/)
+       lib/commons-io-2.4.jar
+     - Apache Commons Logging (http://commons.apache.org/logging)
+       lib/commons-logging-1.1.1.jar
+     - Commons Lang (http://commons.apache.org/lang/)
+       lib/commons-lang3-3.1.jar
+
+   ===
+
+   Component(s):
+   - Java Servlet API (http://servlet-spec.java.net)
+     lib/javax.servlet-3.0.20100224.jar
+
+
+   are available under the CDDL 1.0
+   --
+      COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0
+
+      1. Definitions.
+
+      1.1. “Contributor” means each individual or entity that creates or contributes to the creation of Modifications.
+
+      1.2. “Contributor Version” means the combination of the Original Software, prior Modifications used by a Contributor (if any), and the Modifications made by that particular Contributor.
+
+      1.3. “Covered Software” means (a) the Original Software, or (b) Modifications, or (c) the combination of files containing Original Software with files containing Modifications, in each case including portions thereof.
+
+      1.4. “Executable” means the Covered Software in any form other than Source Code.
+
+      1.5. “Initial Developer” means the individual or entity that first makes Original Software available under this License.
+
+      1.6. “Larger Work” means a work which combines Covered Software or portions thereof with code not governed by the terms of this License.
+
+      1.7. “License” means this document.
+
+      1.8. “Licensable” means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein.
+
+      1.9. “Modifications” means the Source Code and Executable form of any of the following:
+
+      A. Any file that results from an addition to, deletion from or modification of the contents of a file containing Original Software or previous Modifications;
+
+      B. Any new file that contains any part of the Original Software or previous Modification; or
+
+      C. Any new file that is contributed or otherwise made available under the terms of this License.
+
+      1.10. “Original Software” means the Source Code and Executable form of computer software code that is originally released under this License.
+
+      1.11. “Patent Claims” means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor.
+
+      1.12. “Source Code” means (a) the common form of computer software code in which modifications are made and (b) associated documentation included in or with such code.
+
+      1.13. “You” (or “Your”) means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, “You” includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, “control” means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity.
+
+      2. License Grants.
+
+      2.1. The Initial Developer Grant.
+
+      Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, the Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license:
+
+      (a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer, to use, reproduce, modify, display, perform, sublicense and distribute the Original Software (or portions thereof), with or without Modifications, and/or as part of a Larger Work; and
+
+      (b) under Patent Claims infringed by the making, using or selling of Original Software, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Software (or portions thereof).
+
+      (c) The licenses granted in Sections 2.1(a) and (b) are effective on the date Initial Developer first distributes or otherwise makes the Original Software available to a third party under the terms of this License.
+
+      (d) Notwithstanding Section 2.1(b) above, no patent license is granted: (1) for code that You delete from the Original Software, or (2) for infringements caused by: (i) the modification of the Original Software, or (ii) the combination of the Original Software with other software or devices.
+
+      2.2. Contributor Grant.
+
+      Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license:
+
+      (a) under intellectual property rights (other than patent or trademark) Licensable by Contributor to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof), either on an unmodified basis, with other Modifications, as Covered Software and/or as part of a Larger Work; and
+
+      (b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: (1) Modifications made by that Contributor (or portions thereof); and (2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination).
+
+      (c) The licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first distributes or otherwise makes the Modifications available to a third party.
+
+      (d) Notwithstanding Section 2.2(b) above, no patent license is granted: (1) for any code that Contributor has deleted from the Contributor Version; (2) for infringements caused by: (i) third party modifications of Contributor Version, or (ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or (3) under Patent Claims infringed by Covered Software in the absence of Modifications made by that Contributor.
+
+      3. Distribution Obligations.
+
+      3.1. Availability of Source Code.
+
+      Any Covered Software that You distribute or otherwise make available in Executable form must also be made available in Source Code form and that Source Code form must be distributed only under the terms of this License. You must include a copy of this License with every copy of the Source Code form of the Covered Software You distribute or otherwise make available. You must inform recipients of any such Covered Software in Executable form as to how they can obtain such Covered Software in Source Code form in a reasonable manner on or through a medium customarily used for software exchange.
+
+      3.2. Modifications.
+
+      The Modifications that You create or to which You contribute are governed by the terms of this License. You represent that You believe Your Modifications are Your original creation(s) and/or You have sufficient rights to grant the rights conveyed by this License.
+
+      3.3. Required Notices.
+
+      You must include a notice in each of Your Modifications that identifies You as the Contributor of the Modification. You may not remove or alter any copyright, patent or trademark notices contained within the Covered Software, or any notices of licensing or any descriptive text giving attribution to any Contributor or the Initial Developer.
+
+      3.4. Application of Additional Terms.
+
+      You may not offer or impose any terms on any Covered Software in Source Code form that alters or restricts the applicable version of this License or the recipients’ rights hereunder. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, you may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear that any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer.
+
+      3.5. Distribution of Executable Versions.
+
+      You may distribute the Executable form of the Covered Software under the terms of this License or under the terms of a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable form does not attempt to limit or alter the recipient’s rights in the Source Code form from the rights set forth in this License. If You distribute the Covered Software in Executable form under a different license, You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer.
+
+      3.6. Larger Works.
+
+      You may create a Larger Work by combining Covered Software with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Software.
+
+      4. Versions of the License.
+
+      4.1. New Versions.
+
+      Sun Microsystems, Inc. is the initial license steward and may publish revised and/or new versions of this License from time to time. Each version will be given a distinguishing version number. Except as provided in Section 4.3, no one other than the license steward has the right to modify this License.
+
+      4.2. Effect of New Versions.
+
+      You may always continue to use, distribute or otherwise make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. If the Initial Developer includes a notice in the Original Software prohibiting it from being distributed or otherwise made available under any subsequent version of the License, You must distribute and make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. Otherwise, You may also choose to use, distribute or otherwise make the Covered Software available under the terms of any subsequent version of the License published by the license steward.
+
+      4.3. Modified Versions.
+
+      When You are an Initial Developer and You want to create a new license for Your Original Software, You may create and use a modified version of this License if You: (a) rename the license and remove any references to the name of the license steward (except to note that the license differs from this License); and (b) otherwise make it clear that the license contains terms which differ from this License.
+
+      5. DISCLAIMER OF WARRANTY.
+
+      COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN “AS IS” BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+      6. TERMINATION.
+
+      6.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive.
+
+      6.2. If You assert a patent infringement claim (excluding declaratory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You assert such claim is referred to as “Participant”) alleging that the Participant Software (meaning the Contributor Version where the Participant is a Contributor or the Original Software where the Participant is the Initial Developer) directly or indirectly infringes any patent, then any and all rights granted directly or indirectly to You by such Participant, the Initial Developer (if the Initial Developer is not the Participant) and all Contributors under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively and automatically at the expiration of such 60 day notice period, unless if within such 60 day period You withdraw Your claim with respect to the Participant Software against such Participant either unilaterally or pursuant to a written agreement with Participant.
+
+      6.3. In the event of termination under Sections 6.1 or 6.2 above, all end user licenses that have been validly granted by You or any distributor hereunder prior to termination (excluding licenses granted to You by any distributor) shall survive termination.
+
+      7. LIMITATION OF LIABILITY.
+
+      UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOST PROFITS, LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY’S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+      8. U.S. GOVERNMENT END USERS.
+
+      The Covered Software is a “commercial item,” as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of “commercial computer software” (as that term is defined at 48 C.F.R. § 252.227-7014(a)(1)) and “commercial computer software documentation” as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Software with only those rights set forth herein. This U.S. Government Rights clause is in lieu of, and supersedes, any other FAR, DFAR, or other clause or provision that addresses Government rights in computer software under this License.
+
+      9. MISCELLANEOUS.
+
+      This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by the law of the jurisdiction specified in a notice contained within the Original Software (except to the extent applicable law, if any, provides otherwise), excluding such jurisdiction’s conflict-of-law provisions. Any litigation relating to this License shall be subject to the jurisdiction of the courts located in the jurisdiction and venue specified in a notice contained within the Original Software, with the losing party responsible for costs, including, without limitation, court costs and reasonable attorneys’ fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. You agree that You alone are responsible for compliance with the United States export administration regulations (and the export control laws and regulation of any other countries) when You use, distribute or otherwise make available any Covered Software.
+
+      10. RESPONSIBILITY FOR CLAIMS.
+
+      As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability.
+
+      NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL)
+
+      The code released under the CDDL shall be governed by the laws of the State of California (excluding conflict-of-law provisions). Any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California and the state courts of the State of California, with venue lying in Santa Clara County, California.
+
+
+   ===
+
+   Component(s):
+
+   - JUnit (http://junit.org)
+     lib/junit-4.11.jar
+
+   Are available under the CPL 1.0:
+
+   --
+
+      Common Public License Version 1.0
+      THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON PUBLIC
+      LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM
+      CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+      1. DEFINITIONS
+
+      "Contribution" means:
+
+      a) in the case of the initial Contributor, the initial code and
+      documentation distributed under this Agreement, and
+
+      b) in the case of each subsequent Contributor:
+
+      i) changes to the Program, and
+
+      ii) additions to the Program;
+
+      where such changes and/or additions to the Program originate from and are
+      distributed by that particular Contributor. A Contribution 'originates' from a
+      Contributor if it was added to the Program by such Contributor itself or anyone
+      acting on such Contributor's behalf. Contributions do not include additions to
+      the Program which: (i) are separate modules of software distributed in
+      conjunction with the Program under their own license agreement, and (ii) are not
+      derivative works of the Program.
+
+      "Contributor" means any person or entity that distributes the Program.
+
+      "Licensed Patents " mean patent claims licensable by a Contributor which are
+      necessarily infringed by the use or sale of its Contribution alone or when
+      combined with the Program.
+
+      "Program" means the Contributions distributed in accordance with this Agreement.
+
+      "Recipient" means anyone who receives the Program under this Agreement,
+      including all Contributors.
+
+      2. GRANT OF RIGHTS
+
+      a) Subject to the terms of this Agreement, each Contributor hereby grants
+      Recipient a non-exclusive, worldwide, royalty-free copyright license to
+      reproduce, prepare derivative works of, publicly display, publicly perform,
+      distribute and sublicense the Contribution of such Contributor, if any, and such
+      derivative works, in source code and object code form.
+
+      b) Subject to the terms of this Agreement, each Contributor hereby grants
+      Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed
+      Patents to make, use, sell, offer to sell, import and otherwise transfer the
+      Contribution of such Contributor, if any, in source code and object code form.
+      This patent license shall apply to the combination of the Contribution and the
+      Program if, at the time the Contribution is added by the Contributor, such
+      addition of the Contribution causes such combination to be covered by the
+      Licensed Patents. The patent license shall not apply to any other combinations
+      which include the Contribution. No hardware per se is licensed hereunder.
+
+      c) Recipient understands that although each Contributor grants the licenses
+      to its Contributions set forth herein, no assurances are provided by any
+      Contributor that the Program does not infringe the patent or other intellectual
+      property rights of any other entity. Each Contributor disclaims any liability to
+      Recipient for claims brought by any other entity based on infringement of
+      intellectual property rights or otherwise. As a condition to exercising the
+      rights and licenses granted hereunder, each Recipient hereby assumes sole
+      responsibility to secure any other intellectual property rights needed, if any.
+      For example, if a third party patent license is required to allow Recipient to
+      distribute the Program, it is Recipient's responsibility to acquire that license
+      before distributing the Program.
+
+      d) Each Contributor represents that to its knowledge it has sufficient
+      copyright rights in its Contribution, if any, to grant the copyright license set
+      forth in this Agreement.
+
+      3. REQUIREMENTS
+
+      A Contributor may choose to distribute the Program in object code form under its
+      own license agreement, provided that:
+
+      a) it complies with the terms and conditions of this Agreement; and
+
+      b) its license agreement:
+
+      i) effectively disclaims on behalf of all Contributors all warranties and
+      conditions, express and implied, including warranties or conditions of title and
+      non-infringement, and implied warranties or conditions of merchantability and
+      fitness for a particular purpose;
+
+      ii) effectively excludes on behalf of all Contributors all liability for
+      damages, including direct, indirect, special, incidental and consequential
+      damages, such as lost profits;
+
+      iii) states that any provisions which differ from this Agreement are offered
+      by that Contributor alone and not by any other party; and
+
+      iv) states that source code for the Program is available from such
+      Contributor, and informs licensees how to obtain it in a reasonable manner on or
+      through a medium customarily used for software exchange.
+
+      When the Program is made available in source code form:
+
+      a) it must be made available under this Agreement; and
+
+      b) a copy of this Agreement must be included with each copy of the Program.
+
+      Contributors may not remove or alter any copyright notices contained within the
+      Program.
+
+      Each Contributor must identify itself as the originator of its Contribution, if
+      any, in a manner that reasonably allows subsequent Recipients to identify the
+      originator of the Contribution.
+
+      4. COMMERCIAL DISTRIBUTION
+
+      Commercial distributors of software may accept certain responsibilities with
+      respect to end users, business partners and the like. While this license is
+      intended to facilitate the commercial use of the Program, the Contributor who
+      includes the Program in a commercial product offering should do so in a manner
+      which does not create potential liability for other Contributors. Therefore, if
+      a Contributor includes the Program in a commercial product offering, such
+      Contributor ("Commercial Contributor") hereby agrees to defend and indemnify
+      every other Contributor ("Indemnified Contributor") against any losses, damages
+      and costs (collectively "Losses") arising from claims, lawsuits and other legal
+      actions brought by a third party against the Indemnified Contributor to the
+      extent caused by the acts or omissions of such Commercial Contributor in
+      connection with its distribution of the Program in a commercial product
+      offering. The obligations in this section do not apply to any claims or Losses
+      relating to any actual or alleged intellectual property infringement. In order
+      to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+      Contributor in writing of such claim, and b) allow the Commercial Contributor to
+      control, and cooperate with the Commercial Contributor in, the defense and any
+      related settlement negotiations. The Indemnified Contributor may participate in
+      any such claim at its own expense.
+
+      For example, a Contributor might include the Program in a commercial product
+      offering, Product X. That Contributor is then a Commercial Contributor. If that
+      Commercial Contributor then makes performance claims, or offers warranties
+      related to Product X, those performance claims and warranties are such
+      Commercial Contributor's responsibility alone. Under this section, the
+      Commercial Contributor would have to defend claims against the other
+      Contributors related to those performance claims and warranties, and if a court
+      requires any other Contributor to pay any damages as a result, the Commercial
+      Contributor must pay those damages.
+
+      5. NO WARRANTY
+
+      EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED 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. Each
+      Recipient is solely responsible for determining the appropriateness of using and
+      distributing the Program and assumes all risks associated with its exercise of
+      rights under this Agreement, including but not limited to the risks and costs of
+      program errors, compliance with applicable laws, damage to or loss of data,
+      programs or equipment, and unavailability or interruption of operations.
+
+      6. DISCLAIMER OF LIABILITY
+
+      EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY
+      CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+      SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST
+      PROFITS), 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 OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS
+      GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+      7. GENERAL
+
+      If any provision of this Agreement is invalid or unenforceable under applicable
+      law, it shall not affect the validity or enforceability of the remainder of the
+      terms of this Agreement, and without further action by the parties hereto, such
+      provision shall be reformed to the minimum extent necessary to make such
+      provision valid and enforceable.
+
+      If Recipient institutes patent litigation against a Contributor with respect to
+      a patent applicable to software (including a cross-claim or counterclaim in a
+      lawsuit), then any patent licenses granted by that Contributor to such Recipient
+      under this Agreement shall terminate as of the date such litigation is filed. In
+      addition, if Recipient institutes patent litigation against any entity
+      (including a cross-claim or counterclaim in a lawsuit) alleging that the Program
+      itself (excluding combinations of the Program with other software or hardware)
+      infringes such Recipient's patent(s), then such Recipient's rights granted under
+      Section 2(b) shall terminate as of the date such litigation is filed.
+
+      All Recipient's rights under this Agreement shall terminate if it fails to
+      comply with any of the material terms or conditions of this Agreement and does
+      not cure such failure in a reasonable period of time after becoming aware of
+      such noncompliance. If all Recipient's rights under this Agreement terminate,
+      Recipient agrees to cease use and distribution of the Program as soon as
+      reasonably practicable. However, Recipient's obligations under this Agreement
+      and any licenses granted by Recipient relating to the Program shall continue and
+      survive.
+
+      Everyone is permitted to copy and distribute copies of this Agreement, but in
+      order to avoid inconsistency the Agreement is copyrighted and may only be
+      modified in the following manner. The Agreement Steward reserves the right to
+      publish new versions (including revisions) of this Agreement from time to time.
+      No one other than the Agreement Steward has the right to modify this Agreement.
+      IBM is the initial Agreement Steward. IBM may assign the responsibility to serve
+      as the Agreement Steward to a suitable separate entity. Each new version of the
+      Agreement will be given a distinguishing version number. The Program (including
+      Contributions) may always be distributed subject to the version of the Agreement
+      under which it was received. In addition, after a new version of the Agreement
+      is published, Contributor may elect to distribute the Program (including its
+      Contributions) under the new version. Except as expressly stated in Sections
+      2(a) and 2(b) above, Recipient receives no rights or licenses to the
+      intellectual property of any Contributor under this Agreement, whether
+      expressly, by implication, estoppel or otherwise. All rights in the Program not
+      expressly granted under this Agreement are reserved.
+
+      This Agreement is governed by the laws of the State of New York and the
+      intellectual property laws of the United States of America. No party to this
+      Agreement will bring a legal action under this Agreement more than one year
+      after the cause of action arose. Each party waives its rights to a jury trial in
+      any resulting litigation.
+      --
+
+      ===
+      Component(s)
+
+      - SLF4J JCL Binding (http://www.slf4j.org) 
+        lib/slf4j-jcl-1.6.3.jar
+      - SLF4J API Module (http://www.slf4j.org/slf4j-api)
+        lib/slf4j-api-1.6.1.jar
+
+      are provided under the MIT license:
+
+      --
+      Copyright (c) 2004-2013 QOS.ch
+       All rights reserved.
+
+       Permission is hereby granted, free  of charge, to any person obtaining
+       a  copy  of this  software  and  associated  documentation files  (the
+       "Software"), to  deal in  the Software without  restriction, including
+       without limitation  the rights to  use, copy, modify,  merge, publish,
+       distribute,  sublicense, and/or sell  copies of  the Software,  and to
+       permit persons to whom the Software  is furnished to do so, subject to
+       the following conditions:
+       
+       The  above  copyright  notice  and  this permission  notice  shall  be
+       included in all copies or substantial portions of the Software.
+       
+       THE  SOFTWARE IS  PROVIDED  "AS  IS", WITHOUT  WARRANTY  OF ANY  KIND,
+       EXPRESS OR  IMPLIED, INCLUDING  BUT NOT LIMITED  TO THE  WARRANTIES OF
+       MERCHANTABILITY,    FITNESS    FOR    A   PARTICULAR    PURPOSE    AND
+       NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+       LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+       OF CONTRACT, TORT OR OTHERWISE,  ARISING FROM, OUT OF OR IN CONNECTION
+       WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+   --
+
+   ===
+   Component(s):
+   - JSON (JavaScript Object Notation) (http://www.json.org/java/index.html) 
+     lib/json-20090211.jar
+
+   are available under the JSON license:
+
+   --
+      Copyright (c) 2002 JSON.org
+
+      Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+      The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+      The Software shall be used for Good, not Evil.
+
+      THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+   --
+
+
+   ===
+   Component(s):
+
+   - args4j (http://args4j.dev.java.net/args4j/) 
+     lib/args4j-2.0.12.jar
+
+   are available under the MIT License:
+
+   --
+      Copyright (c) 2003, Kohsuke Kawaguchi
+
+      Permission is hereby granted, free of charge, to any person
+      obtaining a copy of this software and associated documentation
+      files (the "Software"), to deal in the Software without
+      restriction, including without limitation the rights to use,
+      copy, modify, merge, publish, distribute, sublicense, and/or sell
+      copies of the Software, and to permit persons to whom the
+      Software is furnished to do so, subject to the following
+      conditions:
+
+      The above copyright notice and this permission notice shall be
+      included in all copies or substantial portions of the Software.
+
+      THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+      EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+      OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+      NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+      HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+      WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+      FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+      OTHER DEALINGS IN THE SOFTWARE.
+   --
+
+   ===
+   Component(s):
+   - Mockito 
+     lib/mockito-all-2.0.2-beta.jar
+
+   are available under the MIT License:
+
+   --
+      The MIT License
+
+      Copyright (c) 2007 Mockito contributors
+
+      Permission is hereby granted, free of charge, to any person obtaining a copy
+      of this software and associated documentation files (the "Software"), to deal
+      in the Software without restriction, including without limitation the rights
+      to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+      copies of the Software, and to permit persons to whom the Software is
+      furnished to do so, subject to the following conditions:
+
+      The above copyright notice and this permission notice shall be included in
+      all copies or substantial portions of the Software.
+
+      THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+      IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+      FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+      AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+      LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+      OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+      THE SOFTWARE.
+  --
+
+   ===
+   Component(s):
+   - Mockito
+     lib/mockito-all-2.0.2-beta.jar
+
+   contain components under the BSD License
+
+   --
+    BSD License
+
+    Copyright (c) 2000-2015 www.hamcrest.org
+    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 Hamcrest 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.
+  --
+
+   ===
+   Component(s):
+   - Mockito
+     lib/mockito-all-2.0.2-beta.jar
+
+   contain components under the BSD License
+
+   --
+    Copyright (c) 2000-2011 INRIA, France Telecom
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+
+    2. 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.
+
+    3. Neither the name of the copyright holders 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.
+  --
+
+   ===
+   Component(s):
+   - Mockito
+     lib/mockito-all-2.0.2-beta.jar
+
+   contain components under the MIT License
+
+   --
+    Copyright (c) 2003-2013, Objenesis Team and all contributors
+
+    Permission is hereby granted, free of charge, to any person obtaining a copy of
+    this software and associated documentation files (the "Software"), to deal in
+    the Software without restriction, including without limitation the rights to
+    use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+    the Software, and to permit persons to whom the Software is furnished to do so,
+    subject to the following conditions:
+
+    The above copyright notice and this permission notice shall be included in all
+    copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+    FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+    COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+    IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+    CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+   --
diff --git a/hyracks/hyracks-examples/btree-example/btreeserver/src/main/licenses/NOTICE b/hyracks/hyracks-examples/btree-example/btreeserver/src/main/licenses/NOTICE
new file mode 100644
index 0000000..e482955
--- /dev/null
+++ b/hyracks/hyracks-examples/btree-example/btreeserver/src/main/licenses/NOTICE
@@ -0,0 +1,135 @@
+Apache AsterixDB
+Copyright 2016 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+AsterixDB utilizes many libraries, which come with the following applicable NOTICE(s):
+
+ - lib/hyracks-api-0.2.17-incubating.jar
+
+    hyracks-api
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/hyracks-comm-0.2.17-incubating.jar
+
+    hyracks-comm
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/hyracks-control-cc-0.2.17-incubating.jar
+
+    hyracks-control-cc
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/hyracks-control-common-0.2.17-incubating.jar
+
+    hyracks-control-common
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/hyracks-control-nc-0.2.17-incubating.jar
+
+    hyracks-control-nc
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/hyracks-control-cc-0.2.17-incubating.jar
+
+    hyracks-control-cc
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/hyracks-ipc-0.2.17-incubating.jar
+
+    hyracks-ipc
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/hyracks-net-0.2.17-incubating.jar
+
+    hyracks-net
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/hyracks-dataflow-common-0.2.17-incubating.jar
+
+    hyracks-dataflow-common
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/hyracks-dataflow-std-0.2.17-incubating.jar
+
+    hyracks-dataflow-std
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/hyracks-storage-am-btree-0.2.17-incubating.jar
+
+    hyracks-storage-am-btree
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/hyracks-storage-am-common-0.2.17-incubating.jar
+
+    hyracks-storage-am-common
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/hyracks-storage-common-0.2.17-incubating.jar
+
+    hyracks-storage-common
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/hyracks-data-std-0.2.17-incubating.jar
+
+    hyracks-data-std
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/hyracks-util-0.2.17-incubating.jar
+
+    hyracks-util
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/mockito-all-2.0.2-beta.jar
+
+    Mockito license - MIT.
+
+    Libraries used:
+
+    Cglib - Apache License 2.0
+    ASM - BSD license
+
+    Mockito all distribution:
+
+    Objenesis - MIT license
+    Hamcrest - BSD license
+
+ - lib/wicket-core-1.5.2.jar
+   Apache Wicket
+   Copyright 2006-2011 Apache Software Foundation
+
+   This product includes software from QOS.ch (http://slf4j.org) licensed under the X11 license
+   Copyright (c) 2004-2008 QOS.ch
+
+   Contains Diff library from Mavens JRCS, released under
+   The Apache Software License, Version 1.1.
+   (c) 1999-2003
+
+   org.apache.wicket.markup.html.form.upload.MultiFileUploadField.js is taken from [1]
+   and has the following notice:
+      "Licence:
+       Use this however/wherever you like, just don't blame me if it breaks
+       anything.
+
+       Credit:
+       If you're nice, you'll leave this bit:
+
+       Class by Stickman -- http://www.the-stickman.com
+       with thanks to:
+       [for Safari fixes]
+          Luis Torrefranca -- http://www.law.pitt.edu
+          and
+          Shawn Parker & John Pennypacker -- http://www.fuzzycoconut.com
+       [for duplicate name bug]
+          'neal'"
+   [1]: http://the-stickman.com/web-development/javascript/upload-multiple-files-with-a-single-file-element/
+ - lib/wicket-request-1.5.2.jar
+
+    Wicket Request
+    Copyright 2006-2011 Apache Software Foundation
+
+ - lib/wicket-util-1.5.2.jar
+
+    Wicket Util
+    Copyright 2006-2011 Apache Software Foundation
diff --git a/hyracks/hyracks-examples/hyracks-shutdown-test/src/main/assembly/binary-assembly.xml b/hyracks/hyracks-examples/hyracks-shutdown-test/src/main/assembly/binary-assembly.xml
index 7ef6fd0..53b17d2 100644
--- a/hyracks/hyracks-examples/hyracks-shutdown-test/src/main/assembly/binary-assembly.xml
+++ b/hyracks/hyracks-examples/hyracks-shutdown-test/src/main/assembly/binary-assembly.xml
@@ -42,11 +42,17 @@
       <directory>target/classes/META-INF</directory>
       <outputDirectory>.</outputDirectory>
       <includes>
-        <include>LICENSE*</include>
-        <include>NOTICE*</include>
         <include>DISCLAIMER*</include>
         <include>DEPENDENCIES*</include>
       </includes>
     </fileSet>
+     <fileSet>
+      <directory>src/main/licenses</directory>
+      <outputDirectory>.</outputDirectory>
+      <includes>
+        <include>LICENSE*</include>
+        <include>NOTICE*</include>
+      </includes>
+    </fileSet>
  </fileSets>
 </assembly>
diff --git a/hyracks/hyracks-examples/hyracks-shutdown-test/src/main/licenses/LICENSE b/hyracks/hyracks-examples/hyracks-shutdown-test/src/main/licenses/LICENSE
new file mode 100644
index 0000000..644bea1
--- /dev/null
+++ b/hyracks/hyracks-examples/hyracks-shutdown-test/src/main/licenses/LICENSE
@@ -0,0 +1,707 @@
+
+                                 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.
+
+
+   ASTERIXDB COMPONENTS:
+
+   AsterixDB 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 condition of the following
+   licenses.
+
+   Components under Apache License 2.0 are as follows:
+
+     - HttpClient (http://hc.apache.org/httpcomponents-client)
+       lib/httpclient-4.3.jar
+     - HttpCore (http://hc.apache.org/httpcomponents-core-ga)
+       lib/httpcore-4.3.jar
+     - Jetty :: Continuation (http://www.eclipse.org/jetty/jetty-continuation)
+       lib/jetty-continuation-8.0.0.RC0.jar
+     - Jetty :: Http Utility (http://www.eclipse.org/jetty/jetty-http)
+       lib/jetty-http-8.0.0.RC0.jar
+     - Jetty :: IO Utility (http://www.eclipse.org/jetty/jetty-io)
+       lib/jetty-io-8.0.0.RC0.jar
+     - Jetty :: Security (http://www.eclipse.org/jetty/jetty-security)
+       lib/jetty-security-8.0.0.RC0.jar
+     - Jetty :: Server Core (http://www.eclipse.org/jetty)
+       lib/jetty-server-8.0.0.RC0.jar
+     - Jetty :: Servlet Handling (http://www.eclipse.org/jetty/jetty-servlet)
+       lib/jetty-servlet-8.0.0.RC0.jar
+     - Jetty :: Utilities (http://www.eclipse.org/jetty/jetty-util)
+       lib/jetty-util-8.0.0.RC0.jar
+     - Jetty :: Webapp Application Support (http://www.eclipse.org/jetty/jetty-webapp)
+       lib/jetty-webapp-8.0.0.RC0.jar
+     - Jetty :: XML utilities (http://www.eclipse.org/jetty/jetty-xml)
+       lib/jetty-xml-8.0.0.RC0.jar
+     - Servlet API (http://www.eclipse.org/jetty/jetty-parent/servlet-api)
+       lib/servlet-api-3.0.20100224.jar
+     - Wicket Core (http://wicket.apache.org/wicket-core/wicket-core)
+       lib/wicket-core-1.5.2.jar
+     - Wicket Request (http://maven.apache.org)
+       lib/wicket-request-1.5.2.jar
+     - Wicket Util (http://maven.apache.org)
+       lib/wicket-util-1.5.2.jar
+     - Apache Commons Codec (http://commons.apache.org/codec/commons-codec)
+       lib/commons-codec-1.4.jar
+     - Commons IO (http://commons.apache.org/io/)
+       lib/commons-io-2.4.jar
+     - Apache Commons Logging (http://commons.apache.org/logging)
+       lib/commons-logging-1.1.1.jar
+     - Commons Lang (http://commons.apache.org/lang/)
+       lib/commons-lang3-3.1.jar
+
+   ===
+
+   Component(s):
+   - Java Servlet API (http://servlet-spec.java.net)
+     lib/javax.servlet-3.0.20100224.jar
+
+
+   are available under the CDDL 1.0
+   --
+      COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0
+
+      1. Definitions.
+
+      1.1. “Contributor” means each individual or entity that creates or contributes to the creation of Modifications.
+
+      1.2. “Contributor Version” means the combination of the Original Software, prior Modifications used by a Contributor (if any), and the Modifications made by that particular Contributor.
+
+      1.3. “Covered Software” means (a) the Original Software, or (b) Modifications, or (c) the combination of files containing Original Software with files containing Modifications, in each case including portions thereof.
+
+      1.4. “Executable” means the Covered Software in any form other than Source Code.
+
+      1.5. “Initial Developer” means the individual or entity that first makes Original Software available under this License.
+
+      1.6. “Larger Work” means a work which combines Covered Software or portions thereof with code not governed by the terms of this License.
+
+      1.7. “License” means this document.
+
+      1.8. “Licensable” means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein.
+
+      1.9. “Modifications” means the Source Code and Executable form of any of the following:
+
+      A. Any file that results from an addition to, deletion from or modification of the contents of a file containing Original Software or previous Modifications;
+
+      B. Any new file that contains any part of the Original Software or previous Modification; or
+
+      C. Any new file that is contributed or otherwise made available under the terms of this License.
+
+      1.10. “Original Software” means the Source Code and Executable form of computer software code that is originally released under this License.
+
+      1.11. “Patent Claims” means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor.
+
+      1.12. “Source Code” means (a) the common form of computer software code in which modifications are made and (b) associated documentation included in or with such code.
+
+      1.13. “You” (or “Your”) means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, “You” includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, “control” means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity.
+
+      2. License Grants.
+
+      2.1. The Initial Developer Grant.
+
+      Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, the Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license:
+
+      (a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer, to use, reproduce, modify, display, perform, sublicense and distribute the Original Software (or portions thereof), with or without Modifications, and/or as part of a Larger Work; and
+
+      (b) under Patent Claims infringed by the making, using or selling of Original Software, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Software (or portions thereof).
+
+      (c) The licenses granted in Sections 2.1(a) and (b) are effective on the date Initial Developer first distributes or otherwise makes the Original Software available to a third party under the terms of this License.
+
+      (d) Notwithstanding Section 2.1(b) above, no patent license is granted: (1) for code that You delete from the Original Software, or (2) for infringements caused by: (i) the modification of the Original Software, or (ii) the combination of the Original Software with other software or devices.
+
+      2.2. Contributor Grant.
+
+      Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license:
+
+      (a) under intellectual property rights (other than patent or trademark) Licensable by Contributor to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof), either on an unmodified basis, with other Modifications, as Covered Software and/or as part of a Larger Work; and
+
+      (b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: (1) Modifications made by that Contributor (or portions thereof); and (2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination).
+
+      (c) The licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first distributes or otherwise makes the Modifications available to a third party.
+
+      (d) Notwithstanding Section 2.2(b) above, no patent license is granted: (1) for any code that Contributor has deleted from the Contributor Version; (2) for infringements caused by: (i) third party modifications of Contributor Version, or (ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or (3) under Patent Claims infringed by Covered Software in the absence of Modifications made by that Contributor.
+
+      3. Distribution Obligations.
+
+      3.1. Availability of Source Code.
+
+      Any Covered Software that You distribute or otherwise make available in Executable form must also be made available in Source Code form and that Source Code form must be distributed only under the terms of this License. You must include a copy of this License with every copy of the Source Code form of the Covered Software You distribute or otherwise make available. You must inform recipients of any such Covered Software in Executable form as to how they can obtain such Covered Software in Source Code form in a reasonable manner on or through a medium customarily used for software exchange.
+
+      3.2. Modifications.
+
+      The Modifications that You create or to which You contribute are governed by the terms of this License. You represent that You believe Your Modifications are Your original creation(s) and/or You have sufficient rights to grant the rights conveyed by this License.
+
+      3.3. Required Notices.
+
+      You must include a notice in each of Your Modifications that identifies You as the Contributor of the Modification. You may not remove or alter any copyright, patent or trademark notices contained within the Covered Software, or any notices of licensing or any descriptive text giving attribution to any Contributor or the Initial Developer.
+
+      3.4. Application of Additional Terms.
+
+      You may not offer or impose any terms on any Covered Software in Source Code form that alters or restricts the applicable version of this License or the recipients’ rights hereunder. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, you may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear that any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer.
+
+      3.5. Distribution of Executable Versions.
+
+      You may distribute the Executable form of the Covered Software under the terms of this License or under the terms of a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable form does not attempt to limit or alter the recipient’s rights in the Source Code form from the rights set forth in this License. If You distribute the Covered Software in Executable form under a different license, You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer.
+
+      3.6. Larger Works.
+
+      You may create a Larger Work by combining Covered Software with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Software.
+
+      4. Versions of the License.
+
+      4.1. New Versions.
+
+      Sun Microsystems, Inc. is the initial license steward and may publish revised and/or new versions of this License from time to time. Each version will be given a distinguishing version number. Except as provided in Section 4.3, no one other than the license steward has the right to modify this License.
+
+      4.2. Effect of New Versions.
+
+      You may always continue to use, distribute or otherwise make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. If the Initial Developer includes a notice in the Original Software prohibiting it from being distributed or otherwise made available under any subsequent version of the License, You must distribute and make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. Otherwise, You may also choose to use, distribute or otherwise make the Covered Software available under the terms of any subsequent version of the License published by the license steward.
+
+      4.3. Modified Versions.
+
+      When You are an Initial Developer and You want to create a new license for Your Original Software, You may create and use a modified version of this License if You: (a) rename the license and remove any references to the name of the license steward (except to note that the license differs from this License); and (b) otherwise make it clear that the license contains terms which differ from this License.
+
+      5. DISCLAIMER OF WARRANTY.
+
+      COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN “AS IS” BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+      6. TERMINATION.
+
+      6.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive.
+
+      6.2. If You assert a patent infringement claim (excluding declaratory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You assert such claim is referred to as “Participant”) alleging that the Participant Software (meaning the Contributor Version where the Participant is a Contributor or the Original Software where the Participant is the Initial Developer) directly or indirectly infringes any patent, then any and all rights granted directly or indirectly to You by such Participant, the Initial Developer (if the Initial Developer is not the Participant) and all Contributors under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively and automatically at the expiration of such 60 day notice period, unless if within such 60 day period You withdraw Your claim with respect to the Participant Software against such Participant either unilaterally or pursuant to a written agreement with Participant.
+
+      6.3. In the event of termination under Sections 6.1 or 6.2 above, all end user licenses that have been validly granted by You or any distributor hereunder prior to termination (excluding licenses granted to You by any distributor) shall survive termination.
+
+      7. LIMITATION OF LIABILITY.
+
+      UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOST PROFITS, LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY’S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+      8. U.S. GOVERNMENT END USERS.
+
+      The Covered Software is a “commercial item,” as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of “commercial computer software” (as that term is defined at 48 C.F.R. § 252.227-7014(a)(1)) and “commercial computer software documentation” as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Software with only those rights set forth herein. This U.S. Government Rights clause is in lieu of, and supersedes, any other FAR, DFAR, or other clause or provision that addresses Government rights in computer software under this License.
+
+      9. MISCELLANEOUS.
+
+      This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by the law of the jurisdiction specified in a notice contained within the Original Software (except to the extent applicable law, if any, provides otherwise), excluding such jurisdiction’s conflict-of-law provisions. Any litigation relating to this License shall be subject to the jurisdiction of the courts located in the jurisdiction and venue specified in a notice contained within the Original Software, with the losing party responsible for costs, including, without limitation, court costs and reasonable attorneys’ fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. You agree that You alone are responsible for compliance with the United States export administration regulations (and the export control laws and regulation of any other countries) when You use, distribute or otherwise make available any Covered Software.
+
+      10. RESPONSIBILITY FOR CLAIMS.
+
+      As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability.
+
+      NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL)
+
+      The code released under the CDDL shall be governed by the laws of the State of California (excluding conflict-of-law provisions). Any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California and the state courts of the State of California, with venue lying in Santa Clara County, California.
+
+
+   ===
+
+   Component(s):
+
+   - JUnit (http://junit.org)
+     lib/junit-4.11.jar
+
+   Are available under the CPL 1.0:
+
+   --
+
+      Common Public License Version 1.0
+      THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON PUBLIC
+      LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM
+      CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+      1. DEFINITIONS
+
+      "Contribution" means:
+
+      a) in the case of the initial Contributor, the initial code and
+      documentation distributed under this Agreement, and
+
+      b) in the case of each subsequent Contributor:
+
+      i) changes to the Program, and
+
+      ii) additions to the Program;
+
+      where such changes and/or additions to the Program originate from and are
+      distributed by that particular Contributor. A Contribution 'originates' from a
+      Contributor if it was added to the Program by such Contributor itself or anyone
+      acting on such Contributor's behalf. Contributions do not include additions to
+      the Program which: (i) are separate modules of software distributed in
+      conjunction with the Program under their own license agreement, and (ii) are not
+      derivative works of the Program.
+
+      "Contributor" means any person or entity that distributes the Program.
+
+      "Licensed Patents " mean patent claims licensable by a Contributor which are
+      necessarily infringed by the use or sale of its Contribution alone or when
+      combined with the Program.
+
+      "Program" means the Contributions distributed in accordance with this Agreement.
+
+      "Recipient" means anyone who receives the Program under this Agreement,
+      including all Contributors.
+
+      2. GRANT OF RIGHTS
+
+      a) Subject to the terms of this Agreement, each Contributor hereby grants
+      Recipient a non-exclusive, worldwide, royalty-free copyright license to
+      reproduce, prepare derivative works of, publicly display, publicly perform,
+      distribute and sublicense the Contribution of such Contributor, if any, and such
+      derivative works, in source code and object code form.
+
+      b) Subject to the terms of this Agreement, each Contributor hereby grants
+      Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed
+      Patents to make, use, sell, offer to sell, import and otherwise transfer the
+      Contribution of such Contributor, if any, in source code and object code form.
+      This patent license shall apply to the combination of the Contribution and the
+      Program if, at the time the Contribution is added by the Contributor, such
+      addition of the Contribution causes such combination to be covered by the
+      Licensed Patents. The patent license shall not apply to any other combinations
+      which include the Contribution. No hardware per se is licensed hereunder.
+
+      c) Recipient understands that although each Contributor grants the licenses
+      to its Contributions set forth herein, no assurances are provided by any
+      Contributor that the Program does not infringe the patent or other intellectual
+      property rights of any other entity. Each Contributor disclaims any liability to
+      Recipient for claims brought by any other entity based on infringement of
+      intellectual property rights or otherwise. As a condition to exercising the
+      rights and licenses granted hereunder, each Recipient hereby assumes sole
+      responsibility to secure any other intellectual property rights needed, if any.
+      For example, if a third party patent license is required to allow Recipient to
+      distribute the Program, it is Recipient's responsibility to acquire that license
+      before distributing the Program.
+
+      d) Each Contributor represents that to its knowledge it has sufficient
+      copyright rights in its Contribution, if any, to grant the copyright license set
+      forth in this Agreement.
+
+      3. REQUIREMENTS
+
+      A Contributor may choose to distribute the Program in object code form under its
+      own license agreement, provided that:
+
+      a) it complies with the terms and conditions of this Agreement; and
+
+      b) its license agreement:
+
+      i) effectively disclaims on behalf of all Contributors all warranties and
+      conditions, express and implied, including warranties or conditions of title and
+      non-infringement, and implied warranties or conditions of merchantability and
+      fitness for a particular purpose;
+
+      ii) effectively excludes on behalf of all Contributors all liability for
+      damages, including direct, indirect, special, incidental and consequential
+      damages, such as lost profits;
+
+      iii) states that any provisions which differ from this Agreement are offered
+      by that Contributor alone and not by any other party; and
+
+      iv) states that source code for the Program is available from such
+      Contributor, and informs licensees how to obtain it in a reasonable manner on or
+      through a medium customarily used for software exchange.
+
+      When the Program is made available in source code form:
+
+      a) it must be made available under this Agreement; and
+
+      b) a copy of this Agreement must be included with each copy of the Program.
+
+      Contributors may not remove or alter any copyright notices contained within the
+      Program.
+
+      Each Contributor must identify itself as the originator of its Contribution, if
+      any, in a manner that reasonably allows subsequent Recipients to identify the
+      originator of the Contribution.
+
+      4. COMMERCIAL DISTRIBUTION
+
+      Commercial distributors of software may accept certain responsibilities with
+      respect to end users, business partners and the like. While this license is
+      intended to facilitate the commercial use of the Program, the Contributor who
+      includes the Program in a commercial product offering should do so in a manner
+      which does not create potential liability for other Contributors. Therefore, if
+      a Contributor includes the Program in a commercial product offering, such
+      Contributor ("Commercial Contributor") hereby agrees to defend and indemnify
+      every other Contributor ("Indemnified Contributor") against any losses, damages
+      and costs (collectively "Losses") arising from claims, lawsuits and other legal
+      actions brought by a third party against the Indemnified Contributor to the
+      extent caused by the acts or omissions of such Commercial Contributor in
+      connection with its distribution of the Program in a commercial product
+      offering. The obligations in this section do not apply to any claims or Losses
+      relating to any actual or alleged intellectual property infringement. In order
+      to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+      Contributor in writing of such claim, and b) allow the Commercial Contributor to
+      control, and cooperate with the Commercial Contributor in, the defense and any
+      related settlement negotiations. The Indemnified Contributor may participate in
+      any such claim at its own expense.
+
+      For example, a Contributor might include the Program in a commercial product
+      offering, Product X. That Contributor is then a Commercial Contributor. If that
+      Commercial Contributor then makes performance claims, or offers warranties
+      related to Product X, those performance claims and warranties are such
+      Commercial Contributor's responsibility alone. Under this section, the
+      Commercial Contributor would have to defend claims against the other
+      Contributors related to those performance claims and warranties, and if a court
+      requires any other Contributor to pay any damages as a result, the Commercial
+      Contributor must pay those damages.
+
+      5. NO WARRANTY
+
+      EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED 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. Each
+      Recipient is solely responsible for determining the appropriateness of using and
+      distributing the Program and assumes all risks associated with its exercise of
+      rights under this Agreement, including but not limited to the risks and costs of
+      program errors, compliance with applicable laws, damage to or loss of data,
+      programs or equipment, and unavailability or interruption of operations.
+
+      6. DISCLAIMER OF LIABILITY
+
+      EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY
+      CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+      SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST
+      PROFITS), 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 OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS
+      GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+      7. GENERAL
+
+      If any provision of this Agreement is invalid or unenforceable under applicable
+      law, it shall not affect the validity or enforceability of the remainder of the
+      terms of this Agreement, and without further action by the parties hereto, such
+      provision shall be reformed to the minimum extent necessary to make such
+      provision valid and enforceable.
+
+      If Recipient institutes patent litigation against a Contributor with respect to
+      a patent applicable to software (including a cross-claim or counterclaim in a
+      lawsuit), then any patent licenses granted by that Contributor to such Recipient
+      under this Agreement shall terminate as of the date such litigation is filed. In
+      addition, if Recipient institutes patent litigation against any entity
+      (including a cross-claim or counterclaim in a lawsuit) alleging that the Program
+      itself (excluding combinations of the Program with other software or hardware)
+      infringes such Recipient's patent(s), then such Recipient's rights granted under
+      Section 2(b) shall terminate as of the date such litigation is filed.
+
+      All Recipient's rights under this Agreement shall terminate if it fails to
+      comply with any of the material terms or conditions of this Agreement and does
+      not cure such failure in a reasonable period of time after becoming aware of
+      such noncompliance. If all Recipient's rights under this Agreement terminate,
+      Recipient agrees to cease use and distribution of the Program as soon as
+      reasonably practicable. However, Recipient's obligations under this Agreement
+      and any licenses granted by Recipient relating to the Program shall continue and
+      survive.
+
+      Everyone is permitted to copy and distribute copies of this Agreement, but in
+      order to avoid inconsistency the Agreement is copyrighted and may only be
+      modified in the following manner. The Agreement Steward reserves the right to
+      publish new versions (including revisions) of this Agreement from time to time.
+      No one other than the Agreement Steward has the right to modify this Agreement.
+      IBM is the initial Agreement Steward. IBM may assign the responsibility to serve
+      as the Agreement Steward to a suitable separate entity. Each new version of the
+      Agreement will be given a distinguishing version number. The Program (including
+      Contributions) may always be distributed subject to the version of the Agreement
+      under which it was received. In addition, after a new version of the Agreement
+      is published, Contributor may elect to distribute the Program (including its
+      Contributions) under the new version. Except as expressly stated in Sections
+      2(a) and 2(b) above, Recipient receives no rights or licenses to the
+      intellectual property of any Contributor under this Agreement, whether
+      expressly, by implication, estoppel or otherwise. All rights in the Program not
+      expressly granted under this Agreement are reserved.
+
+      This Agreement is governed by the laws of the State of New York and the
+      intellectual property laws of the United States of America. No party to this
+      Agreement will bring a legal action under this Agreement more than one year
+      after the cause of action arose. Each party waives its rights to a jury trial in
+      any resulting litigation.
+      --
+
+      ===
+      Component(s)
+
+      - SLF4J JCL Binding (http://www.slf4j.org) 
+        lib/slf4j-jcl-1.6.3.jar
+      - SLF4J API Module (http://www.slf4j.org/slf4j-api)
+        lib/slf4j-api-1.6.1.jar
+
+      are provided under the MIT license:
+
+      --
+      Copyright (c) 2004-2013 QOS.ch
+       All rights reserved.
+
+       Permission is hereby granted, free  of charge, to any person obtaining
+       a  copy  of this  software  and  associated  documentation files  (the
+       "Software"), to  deal in  the Software without  restriction, including
+       without limitation  the rights to  use, copy, modify,  merge, publish,
+       distribute,  sublicense, and/or sell  copies of  the Software,  and to
+       permit persons to whom the Software  is furnished to do so, subject to
+       the following conditions:
+       
+       The  above  copyright  notice  and  this permission  notice  shall  be
+       included in all copies or substantial portions of the Software.
+       
+       THE  SOFTWARE IS  PROVIDED  "AS  IS", WITHOUT  WARRANTY  OF ANY  KIND,
+       EXPRESS OR  IMPLIED, INCLUDING  BUT NOT LIMITED  TO THE  WARRANTIES OF
+       MERCHANTABILITY,    FITNESS    FOR    A   PARTICULAR    PURPOSE    AND
+       NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+       LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+       OF CONTRACT, TORT OR OTHERWISE,  ARISING FROM, OUT OF OR IN CONNECTION
+       WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+   --
+
+   ===
+   Component(s):
+   - JSON (JavaScript Object Notation) (http://www.json.org/java/index.html) 
+     lib/json-20090211.jar
+
+   are available under the JSON license:
+
+   --
+      Copyright (c) 2002 JSON.org
+
+      Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+      The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+      The Software shall be used for Good, not Evil.
+
+      THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+   --
+
+
+   ===
+   Component(s):
+
+   - args4j (http://args4j.dev.java.net/args4j/) 
+     lib/args4j-2.0.12.jar
+
+   are available under the MIT License:
+
+   --
+      Copyright (c) 2003, Kohsuke Kawaguchi
+
+      Permission is hereby granted, free of charge, to any person
+      obtaining a copy of this software and associated documentation
+      files (the "Software"), to deal in the Software without
+      restriction, including without limitation the rights to use,
+      copy, modify, merge, publish, distribute, sublicense, and/or sell
+      copies of the Software, and to permit persons to whom the
+      Software is furnished to do so, subject to the following
+      conditions:
+
+      The above copyright notice and this permission notice shall be
+      included in all copies or substantial portions of the Software.
+
+      THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+      EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+      OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+      NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+      HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+      WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+      FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+      OTHER DEALINGS IN THE SOFTWARE.
+   --
diff --git a/hyracks/hyracks-examples/hyracks-shutdown-test/src/main/licenses/NOTICE b/hyracks/hyracks-examples/hyracks-shutdown-test/src/main/licenses/NOTICE
new file mode 100644
index 0000000..791d0ba
--- /dev/null
+++ b/hyracks/hyracks-examples/hyracks-shutdown-test/src/main/licenses/NOTICE
@@ -0,0 +1,121 @@
+Apache AsterixDB
+Copyright 2016 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+AsterixDB utilizes many libraries, which come with the following applicable NOTICE(s):
+
+ - lib/hyracks-api-0.2.17-incubating.jar
+
+    hyracks-api
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/hyracks-comm-0.2.17-incubating.jar
+
+    hyracks-comm
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/hyracks-control-cc-0.2.17-incubating.jar
+
+    hyracks-control-cc
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/hyracks-control-common-0.2.17-incubating.jar
+
+    hyracks-control-common
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/hyracks-control-nc-0.2.17-incubating.jar
+
+    hyracks-control-nc
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/hyracks-control-cc-0.2.17-incubating.jar
+
+    hyracks-control-cc
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/hyracks-ipc-0.2.17-incubating.jar
+
+    hyracks-ipc
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/hyracks-net-0.2.17-incubating.jar
+
+    hyracks-net
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/hyracks-dataflow-common-0.2.17-incubating.jar
+
+    hyracks-dataflow-common
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/hyracks-dataflow-std-0.2.17-incubating.jar
+
+    hyracks-dataflow-std
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/hyracks-storage-am-btree-0.2.17-incubating.jar
+
+    hyracks-storage-am-btree
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/hyracks-storage-am-common-0.2.17-incubating.jar
+
+    hyracks-storage-am-common
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/hyracks-storage-common-0.2.17-incubating.jar
+
+    hyracks-storage-common
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/hyracks-data-std-0.2.17-incubating.jar
+
+    hyracks-data-std
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/hyracks-util-0.2.17-incubating.jar
+
+    hyracks-util
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/wicket-core-1.5.2.jar
+   Apache Wicket
+   Copyright 2006-2011 Apache Software Foundation
+
+   This product includes software from QOS.ch (http://slf4j.org) licensed under the X11 license
+   Copyright (c) 2004-2008 QOS.ch
+
+   Contains Diff library from Mavens JRCS, released under
+   The Apache Software License, Version 1.1.
+   (c) 1999-2003
+
+   org.apache.wicket.markup.html.form.upload.MultiFileUploadField.js is taken from [1]
+   and has the following notice:
+      "Licence:
+       Use this however/wherever you like, just don't blame me if it breaks
+       anything.
+
+       Credit:
+       If you're nice, you'll leave this bit:
+
+       Class by Stickman -- http://www.the-stickman.com
+       with thanks to:
+       [for Safari fixes]
+          Luis Torrefranca -- http://www.law.pitt.edu
+          and
+          Shawn Parker & John Pennypacker -- http://www.fuzzycoconut.com
+       [for duplicate name bug]
+          'neal'"
+   [1]: http://the-stickman.com/web-development/javascript/upload-multiple-files-with-a-single-file-element/
+ - lib/wicket-request-1.5.2.jar
+
+    Wicket Request
+    Copyright 2006-2011 Apache Software Foundation
+
+ - lib/wicket-util-1.5.2.jar
+
+    Wicket Util
+    Copyright 2006-2011 Apache Software Foundation
diff --git a/hyracks/hyracks-examples/text-example/textclient/src/main/assembly/binary-assembly.xml b/hyracks/hyracks-examples/text-example/textclient/src/main/assembly/binary-assembly.xml
index 9c53c81..5d1a191 100644
--- a/hyracks/hyracks-examples/text-example/textclient/src/main/assembly/binary-assembly.xml
+++ b/hyracks/hyracks-examples/text-example/textclient/src/main/assembly/binary-assembly.xml
@@ -38,11 +38,17 @@
       <directory>target/classes/META-INF</directory>
       <outputDirectory>.</outputDirectory>
       <includes>
-        <include>LICENSE*</include>
-        <include>NOTICE*</include>
         <include>DISCLAIMER*</include>
         <include>DEPENDENCIES*</include>
       </includes>
     </fileSet>
+    <fileSet>
+      <directory>src/main/licenses</directory>
+      <outputDirectory>.</outputDirectory>
+      <includes>
+        <include>LICENSE*</include>
+        <include>NOTICE*</include>
+      </includes>
+    </fileSet>
   </fileSets>
 </assembly>
diff --git a/hyracks/hyracks-examples/text-example/textclient/src/main/licenses/LICENSE b/hyracks/hyracks-examples/text-example/textclient/src/main/licenses/LICENSE
new file mode 100644
index 0000000..7974129
--- /dev/null
+++ b/hyracks/hyracks-examples/text-example/textclient/src/main/licenses/LICENSE
@@ -0,0 +1,1739 @@
+
+                                 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.
+
+
+   ASTERIXDB COMPONENTS:
+
+   AsterixDB 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 condition of the following
+   licenses.
+
+   Components under Apache License 2.0 are as follows:
+
+     - Apache Derby Database Engine and Embedded JDBC Driver (http://db.apache.org/derby/derby/)
+       repo/derby-10.10.1.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - JDO API (http://db.apache.org/jdo)
+       repo/jdo-api-3.0.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Rome HTTP Fetcher
+       repo/rome-fetcher-1.0.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - An open source Java toolkit for Amazon S3 (http://jets3t.s3.amazonaws.com/index.html)
+       repo/jets3t-0.6.1 in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - The Netty Project (http://www.jboss.org/netty/)
+       repo/netty-3.2.2.Final.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - The Netty Project (http://netty.io/)
+       repo/netty-3.6.2.Final.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - HttpClient (http://jakarta.apache.org/commons/httpclient/)
+       repo/commons-httpclient-3.0.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - HttpClient (http://hc.apache.org/httpcomponents-client)
+       repo/httpclient-4.3.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - HttpCore (http://hc.apache.org/httpcomponents-core-ga)
+       repo/httpcore-4.3.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - twitter4j-core (http://twitter4j.org/)
+       repo/twitter4j-core-4.0.3.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - twitter4j-stream (http://twitter4j.org/)
+       repo/twitter4j-stream-4.0.3.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Jetty :: Continuation (http://www.eclipse.org/jetty/jetty-continuation)
+       repo/jetty-continuation-8.0.0.RC0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Jetty :: Http Utility (http://www.eclipse.org/jetty/jetty-http)
+       repo/jetty-http-8.0.0.RC0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Jetty :: IO Utility (http://www.eclipse.org/jetty/jetty-io)
+       repo/jetty-io-8.0.0.RC0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Jetty :: Security (http://www.eclipse.org/jetty/jetty-security)
+       repo/jetty-security-8.0.0.RC0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Jetty :: Server Core (http://www.eclipse.org/jetty)
+       repo/jetty-server-8.0.0.RC0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Jetty :: Servlet Handling (http://www.eclipse.org/jetty/jetty-servlet)
+       repo/jetty-servlet-8.0.0.RC0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Jetty :: Utilities (http://www.eclipse.org/jetty/jetty-util)
+       repo/jetty-util-8.0.0.RC0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Jetty :: Webapp Application Support (http://www.eclipse.org/jetty/jetty-webapp)
+       repo/jetty-webapp-8.0.0.RC0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Jetty :: XML utilities (http://www.eclipse.org/jetty/jetty-xml)
+       repo/jetty-xml-8.0.0.RC0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Servlet API (http://www.eclipse.org/jetty/jetty-parent/servlet-api)
+       repo/servlet-api-3.0.20100224.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - BoneCP :: Core Library (http://jolbox.com/bonecp)
+       repo/bonecp-0.8.0.RELEASE.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - FindBugs-jsr305 (http://findbugs.sourceforge.net/)
+       repo/jsr305-1.3.9.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Guava: Google Core Libraries for Java (http://code.google.com/p/guava-libraries/guava)
+       repo/guava-18.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - JSON.simple (http://code.google.com/p/json-simple/)
+       repo/json-simple-1.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Microsoft Windows Azure Client API (https://github.com/WindowsAzure/azure-sdk-for-java)
+       repo/microsoft-windowsazure-api-0.4.4.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - javax.inject (http://code.google.com/p/atinject/)
+       repo/javax.inject-1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Apache Thrift (http://thrift.apache.org)
+       repo/libfb303-0.9.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Apache Thrift (http://thrift.apache.org)
+       repo/libthrift-0.9.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - DataNucleus JDO API plugin (http://www.datanucleus.org)
+       repo/datanucleus-api-jdo-3.2.6.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - DataNucleus Core (http://www.datanucleus.org)
+       repo/datanucleus-core-3.2.10.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - DataNucleus RDBMS (http://www.datanucleus.org)
+       repo/datanucleus-rdbms-3.2.9.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - JAXB2 CommonsValue Constructor Plugin (http://java.net/projects/jaxb2-commons/pages/value-constructor)
+       repo/jaxb2-value-constructor-3.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - StAX API (http://stax.codehaus.org/)
+       repo/stax-api-1.0.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - StAX
+       repo/stax-1.1.1-dev.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Wicket Core (http://wicket.apache.org/wicket-core/wicket-core)
+       repo/wicket-core-1.5.2.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Wicket Request (http://maven.apache.org)
+       repo/wicket-request-1.5.2.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Wicket Util (http://maven.apache.org)
+       repo/wicket-util-1.5.2.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Apache Hadoop Annotations
+       repo/hadoop-annotations-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Apache Hadoop Auth
+       repo/hadoop-auth-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Apache Hadoop Client
+       repo/hadoop-client-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Apache Hadoop Common
+       repo/hadoop-common-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Apache Hadoop Common (tests)
+       repo/hadoop-common-2.2.0-tests.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Apache Hadoop HDFS
+       repo/hadoop-hdfs-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Apache Hadoop HDFS
+       repo/hadoop-hdfs-2.2.0-tests.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - hadoop-mapreduce-client-app
+       repo/hadoop-mapreduce-client-app-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - hadoop-mapreduce-client-common
+       repo/hadoop-mapreduce-client-common-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - hadoop-mapreduce-client-core
+       repo/hadoop-mapreduce-client-core-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - hadoop-mapreduce-client-hs
+       repo/hadoop-mapreduce-client-hs-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - hadoop-mapreduce-client-jobclient
+       repo/hadoop-mapreduce-client-jobclient-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - hadoop-mapreduce-client-jobclient
+       repo/hadoop-mapreduce-client-jobclient-2.2.0-tests.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - hadoop-mapreduce-client-shuffle
+       repo/hadoop-mapreduce-client-shuffle-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Apache Hadoop Mini-Cluster
+       repo/hadoop-minicluster-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - zookeeper
+       repo/zookeeper-3.4.5.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - hadoop-yarn-api
+       repo/hadoop-yarn-api-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - hadoop-yarn-client
+       repo/hadoop-yarn-client-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - hadoop-yarn-common
+       repo/hadoop-yarn-common-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - hadoop-yarn-server-common
+       repo/hadoop-yarn-server-common-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - hadoop-yarn-server-nodemanager
+       repo/hadoop-yarn-server-nodemanager-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - hadoop-yarn-server-resourcemanager
+       repo/hadoop-yarn-server-resourcemanager-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - hadoop-yarn-server-tests
+       repo/hadoop-yarn-server-tests-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - hadoop-yarn-server-web-proxy
+       repo/hadoop-yarn-server-web-proxy-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Plexus Common Utilities (http://plexus.codehaus.org/plexus-utils)
+       repo/plexus-utils-3.0.7.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Jettison
+       repo/jettison-1.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Jackson (http://jackson.codehaus.org)
+       repo/jackson-core-asl-1.8.8.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - JAX-RS provider for JSON content type (http://jackson.codehaus.org)
+       repo/jackson-jaxrs-1.8.3.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Data Mapper for Jackson (http://jackson.codehaus.org)
+       repo/jackson-mapper-asl-1.9.12.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Xml Compatibility extensions for Jackson (http://jackson.codehaus.org)
+       repo/jackson-mapper-xc-1.8.3.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Jackson-core (http://wiki.fasterxml.com/JacksonHome)
+       repo/jackson-core-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Google GuiceCore Library (http://code.google.com/p/google-guice/guice/)
+       repo/guice-3.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Google GuiceExtensionsServlet (http://code.google.com/p/google-guice/extensions-parent/guice-servlet/)
+       repo/guice-servlet-3.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Jetty Server (http://jetty.mortbay.org/)
+       repo/jetty-6.1.26.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Jetty Utilities (http://jetty.mortbay.org/)
+       repo/jetty-util-6.1.26.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Commons Configuration (http://commons.apache.org/${pom.artifactId.substring(8)}/)
+       repo/commons-configuration-1.6.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Digester (http://jakarta.apache.org/commons/digester/)
+       repo/commons-digester-1.8.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - EL (http://jakarta.apache.org/commons/el/)
+       repo/commons-el-1.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Apache Commons BeanUtils
+       repo/commons-beanutils-1.7.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Commons BeanUtils Core (http://commons.apache.org/beanutils/)
+       repo/commons-beanutils-core-1.8.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Commons CLI (http://commons.apache.org/cli/)
+       repo/commons-cli-1.2.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Apache Commons Codec (http://commons.apache.org/codec/commons-codec)
+       repo/commons-codec-1.4.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Apache Commons Collections (http://commons.apache.org/collections/commons-collections)
+       commons-daemon:commons-daemon:jar:1.0.13
+     - Commons Daemon (http://commons.apache.org/daemon/)
+       repo/commons-daemon-1.0.13.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Commons IO (http://commons.apache.org/io/)
+       repo/commons-io-2.4.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Commons Lang (http://commons.apache.org/lang/)
+       repo/commons-lang-2.5.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Apache Commons Logging (http://commons.apache.org/logging)
+       repo/commons-logging-1.0.5.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Apache Commons Logging Api (http://commons.apache.org/logging)
+       repo/commons-logging-api-1.0.4.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Commons Net (http://commons.apache.org/net/)
+       repo/commons-net-3.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Log4j (http://logging.apache.org:80/log4j/1.2/log4j)
+       repo/log4j-1.2.17.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Apache Ant Core (http://ant.apache.org/)
+       repo/ant-1.9.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Apache Ant Launcher (http://ant.apache.org/)
+       repo/ant-launcher-1.9.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Apache Avro (http://avro.apache.org)
+       repo/avro-1.7.5.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Commons Compress (http://commons.apache.org/compress/)
+       repo/commons-compress-1.4.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Commons Lang (http://commons.apache.org/lang/)
+       repo/commons-lang3-3.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Commons Math (http://commons.apache.org/math/)
+       repo/commons-math-2.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Hive Ant Utilities (http://hive.apache.org/hive-ant)
+       repo/hive-ant-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Hive Common (http://hive.apache.org/hive-common)
+       repo/hive-common-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Hive Query Language (http://hive.apache.org/hive-exec)
+       repo/hive-exec-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Hive Metastore (http://hive.apache.org/hive-metastore)
+       repo/hive-metastore-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Hive Serde (http://hive.apache.org/hive-serde)
+       repo/hive-serde-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Hive Shims (http://hive.apache.org/hive-shims)
+       repo/hive-shims-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Hive Shims 0.20 (http://hive.apache.org/hive-shims-0.20)
+       repo/hive-shims-0.20-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Hive Shims 0.20S (http://hive.apache.org/hive-shims-0.20S)
+       repo/hive-shims-0.20S-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Hive Shims 0.23 (http://hive.apache.org/hive-shims-0.23)
+       repo/hive-shims-0.23-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Hive Shims Common (http://hive.apache.org/hive-shims-common)
+       repo/hive-shims-common-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Hive Shims Secure Common (http://hive.apache.org/hive-shims-common-secure)
+       repo/hive-shims-secure-common-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Apache Velocity (http://velocity.apache.org/engine/releases/velocity-1.5/)
+       repo/velocity-1.5.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Jakarta ORO
+       repo/oro-2.0.8.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - ROME
+       repo/rome-1.0.1-modified-01.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - jasper-compiler (http://tomcat.apache.org/jasper-compiler)
+       repo/jasper-compiler-5.5.23.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - jasper-runtime (http://tomcat.apache.org/jasper-runtime)
+       repo/jasper-runtime-5.5.23.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Xerces2 Java Parser (http://xerces.apache.org/xerces2-j)
+       repo/xercesImpl-2.9.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - XML APIs (http://xml.apache.org/commons/components/external/xml-apis)
+       repo/xml-apis-1.3.04.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Groovy (http://groovy.codehaus.org/)
+       repo/groovy-all-2.1.6.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Snappy for Java (http://github.com/xerial/snappy-java/)
+       repo/snappy-java-1.0.4.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+   ===
+
+   Component(s):
+   - Java Servlet API (http://servlet-spec.java.n)
+     repo/javax.servlet-3.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+   - javax.servlet API v.3.0 (http://jcp.org/en/jsr/detail?id=315)
+     repo/servlet-api-2.5.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+   - grizzly-framework (http://grizzly.java.net/grizzly-framework)
+     repo/grizzly-framework-2.1.2.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+   - grizzly-http (http://grizzly.java.net/grizzly-http)
+     repo/grizzly-http-2.1.2.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+   - grizzly-http-server (http://grizzly.java.net/grizzly-http-server)
+     repo/grizzly-http-server-2.1.2.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+   - grizzly-http-servlet (http://grizzly.java.net/grizzly-http-servlet)
+     repo/grizzly-http-servlet-2.1.2.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+   - grizzly-rcm (http://grizzly.java.net/grizzly-rcm)
+     repo/grizzly-rcm-2.1.2.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+   - management-api (http://kenai.com/hg/gmbal~gf_common)
+     repo/management-api-3.0.0-b012.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+   - gmbal-api-only (http://kenai.com/hg/gmbal~master)
+     repo/gmbal-api-only-3.0.0-b023.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+   - JavaBeans Activation Framework (JAF) (http://java.sun.com/products/javabeans/jaf/index.jsp)
+     repo/activation-1.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+   - JavaMail API (https://glassfish.dev.java.net/javaee5/mail/)
+     repo/mail-1.4.5.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+   - Java Servlet API
+     repo/servlet-api-2.5.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+   - Java Transaction API (http://java.sun.com/products/jta/jta)
+     repo/jta-1.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+   - Sun JAXB Reference Implementation Runtime (http://jaxb.java.net/jaxb-impl)
+     repo/jaxb-impl-2.2.3-1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+   - Java Architecture for XML Binding (JAXB API) (https://jaxb.dev.java.net/jaxb-api) 
+     repo/jaxb-api-2.2.2.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+   - Streaming API for XML
+     repo/stax-api-1.0.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+   - jsp-api
+     repo/jsp-api-2.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+
+   are available under the CDDL 1.0
+   --
+      COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0
+
+      1. Definitions.
+
+      1.1. “Contributor” means each individual or entity that creates or contributes to the creation of Modifications.
+
+      1.2. “Contributor Version” means the combination of the Original Software, prior Modifications used by a Contributor (if any), and the Modifications made by that particular Contributor.
+
+      1.3. “Covered Software” means (a) the Original Software, or (b) Modifications, or (c) the combination of files containing Original Software with files containing Modifications, in each case including portions thereof.
+
+      1.4. “Executable” means the Covered Software in any form other than Source Code.
+
+      1.5. “Initial Developer” means the individual or entity that first makes Original Software available under this License.
+
+      1.6. “Larger Work” means a work which combines Covered Software or portions thereof with code not governed by the terms of this License.
+
+      1.7. “License” means this document.
+
+      1.8. “Licensable” means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein.
+
+      1.9. “Modifications” means the Source Code and Executable form of any of the following:
+
+      A. Any file that results from an addition to, deletion from or modification of the contents of a file containing Original Software or previous Modifications;
+
+      B. Any new file that contains any part of the Original Software or previous Modification; or
+
+      C. Any new file that is contributed or otherwise made available under the terms of this License.
+
+      1.10. “Original Software” means the Source Code and Executable form of computer software code that is originally released under this License.
+
+      1.11. “Patent Claims” means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor.
+
+      1.12. “Source Code” means (a) the common form of computer software code in which modifications are made and (b) associated documentation included in or with such code.
+
+      1.13. “You” (or “Your”) means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, “You” includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, “control” means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity.
+
+      2. License Grants.
+
+      2.1. The Initial Developer Grant.
+
+      Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, the Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license:
+
+      (a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer, to use, reproduce, modify, display, perform, sublicense and distribute the Original Software (or portions thereof), with or without Modifications, and/or as part of a Larger Work; and
+
+      (b) under Patent Claims infringed by the making, using or selling of Original Software, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Software (or portions thereof).
+
+      (c) The licenses granted in Sections 2.1(a) and (b) are effective on the date Initial Developer first distributes or otherwise makes the Original Software available to a third party under the terms of this License.
+
+      (d) Notwithstanding Section 2.1(b) above, no patent license is granted: (1) for code that You delete from the Original Software, or (2) for infringements caused by: (i) the modification of the Original Software, or (ii) the combination of the Original Software with other software or devices.
+
+      2.2. Contributor Grant.
+
+      Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license:
+
+      (a) under intellectual property rights (other than patent or trademark) Licensable by Contributor to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof), either on an unmodified basis, with other Modifications, as Covered Software and/or as part of a Larger Work; and
+
+      (b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: (1) Modifications made by that Contributor (or portions thereof); and (2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination).
+
+      (c) The licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first distributes or otherwise makes the Modifications available to a third party.
+
+      (d) Notwithstanding Section 2.2(b) above, no patent license is granted: (1) for any code that Contributor has deleted from the Contributor Version; (2) for infringements caused by: (i) third party modifications of Contributor Version, or (ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or (3) under Patent Claims infringed by Covered Software in the absence of Modifications made by that Contributor.
+
+      3. Distribution Obligations.
+
+      3.1. Availability of Source Code.
+
+      Any Covered Software that You distribute or otherwise make available in Executable form must also be made available in Source Code form and that Source Code form must be distributed only under the terms of this License. You must include a copy of this License with every copy of the Source Code form of the Covered Software You distribute or otherwise make available. You must inform recipients of any such Covered Software in Executable form as to how they can obtain such Covered Software in Source Code form in a reasonable manner on or through a medium customarily used for software exchange.
+
+      3.2. Modifications.
+
+      The Modifications that You create or to which You contribute are governed by the terms of this License. You represent that You believe Your Modifications are Your original creation(s) and/or You have sufficient rights to grant the rights conveyed by this License.
+
+      3.3. Required Notices.
+
+      You must include a notice in each of Your Modifications that identifies You as the Contributor of the Modification. You may not remove or alter any copyright, patent or trademark notices contained within the Covered Software, or any notices of licensing or any descriptive text giving attribution to any Contributor or the Initial Developer.
+
+      3.4. Application of Additional Terms.
+
+      You may not offer or impose any terms on any Covered Software in Source Code form that alters or restricts the applicable version of this License or the recipients’ rights hereunder. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, you may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear that any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer.
+
+      3.5. Distribution of Executable Versions.
+
+      You may distribute the Executable form of the Covered Software under the terms of this License or under the terms of a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable form does not attempt to limit or alter the recipient’s rights in the Source Code form from the rights set forth in this License. If You distribute the Covered Software in Executable form under a different license, You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer.
+
+      3.6. Larger Works.
+
+      You may create a Larger Work by combining Covered Software with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Software.
+
+      4. Versions of the License.
+
+      4.1. New Versions.
+
+      Sun Microsystems, Inc. is the initial license steward and may publish revised and/or new versions of this License from time to time. Each version will be given a distinguishing version number. Except as provided in Section 4.3, no one other than the license steward has the right to modify this License.
+
+      4.2. Effect of New Versions.
+
+      You may always continue to use, distribute or otherwise make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. If the Initial Developer includes a notice in the Original Software prohibiting it from being distributed or otherwise made available under any subsequent version of the License, You must distribute and make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. Otherwise, You may also choose to use, distribute or otherwise make the Covered Software available under the terms of any subsequent version of the License published by the license steward.
+
+      4.3. Modified Versions.
+
+      When You are an Initial Developer and You want to create a new license for Your Original Software, You may create and use a modified version of this License if You: (a) rename the license and remove any references to the name of the license steward (except to note that the license differs from this License); and (b) otherwise make it clear that the license contains terms which differ from this License.
+
+      5. DISCLAIMER OF WARRANTY.
+
+      COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN “AS IS” BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+      6. TERMINATION.
+
+      6.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive.
+
+      6.2. If You assert a patent infringement claim (excluding declaratory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You assert such claim is referred to as “Participant”) alleging that the Participant Software (meaning the Contributor Version where the Participant is a Contributor or the Original Software where the Participant is the Initial Developer) directly or indirectly infringes any patent, then any and all rights granted directly or indirectly to You by such Participant, the Initial Developer (if the Initial Developer is not the Participant) and all Contributors under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively and automatically at the expiration of such 60 day notice period, unless if within such 60 day period You withdraw Your claim with respect to the Participant Software against such Participant either unilaterally or pursuant to a written agreement with Participant.
+
+      6.3. In the event of termination under Sections 6.1 or 6.2 above, all end user licenses that have been validly granted by You or any distributor hereunder prior to termination (excluding licenses granted to You by any distributor) shall survive termination.
+
+      7. LIMITATION OF LIABILITY.
+
+      UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOST PROFITS, LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY’S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+      8. U.S. GOVERNMENT END USERS.
+
+      The Covered Software is a “commercial item,” as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of “commercial computer software” (as that term is defined at 48 C.F.R. § 252.227-7014(a)(1)) and “commercial computer software documentation” as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Software with only those rights set forth herein. This U.S. Government Rights clause is in lieu of, and supersedes, any other FAR, DFAR, or other clause or provision that addresses Government rights in computer software under this License.
+
+      9. MISCELLANEOUS.
+
+      This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by the law of the jurisdiction specified in a notice contained within the Original Software (except to the extent applicable law, if any, provides otherwise), excluding such jurisdiction’s conflict-of-law provisions. Any litigation relating to this License shall be subject to the jurisdiction of the courts located in the jurisdiction and venue specified in a notice contained within the Original Software, with the losing party responsible for costs, including, without limitation, court costs and reasonable attorneys’ fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. You agree that You alone are responsible for compliance with the United States export administration regulations (and the export control laws and regulation of any other countries) when You use, distribute or otherwise make available any Covered Software.
+
+      10. RESPONSIBILITY FOR CLAIMS.
+
+      As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability.
+
+      NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL)
+
+      The code released under the CDDL shall be governed by the laws of the State of California (excluding conflict-of-law provisions). Any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California and the state courts of the State of California, with venue lying in Santa Clara County, California.
+
+
+
+   ==
+
+   Component(s):
+  - jersey-client (https://jersey.java.net/jersey-client/)
+    repo/jersey-client-1.13.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+  - jersey-core (https://jersey.java.net/jersey-core/)
+    repo/jersey-core-1.13.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+  - jersey-grizzly2 (https://jersey.java.net/jersey-grizzly2/)
+    repo/jersey-grizzly2-1.9.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+  - jersey-json (https://jersey.java.net/jersey-json/)
+    repo/jersey-json-1.13.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+  - jersey-server (https://jersey.java.net/jersey-server/)
+    repo/jersey-server-1.9.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+  - jersey-guice (https://jersey.java.net/jersey-contribs/jersey-guice/)
+    repo/jersey-guice-1.9.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+  - Jersey Test FrameworkCore (https://jersey.java.net/jersey-test-framework/jersey-test-framework-core/)
+    repo/jersey-test-framework-1.9.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+  - Jersey Test FrameworkGrizzly 2 Module (https://jersey.java.net/jersey-test-framework/jersey-test-framework-grizzly2/)
+    repo/jersey-test-framework-grizzly2-1.9.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+   Are available under the CDDL 1.1:
+   --
+
+      COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL)Version 1.1
+
+      1. Definitions.
+
+      1.1. “Contributor” means each individual or entity that creates or contributes to the creation of Modifications.
+      1.2. “Contributor Version” means the combination of the Original Software, prior Modifications used by a Contributor (if any), and the Modifications made by that particular Contributor.
+      1.3. “Covered Software” means (a) the Original Software, or (b) Modifications, or (c) the combination of files containing Original Software with files containing Modifications, in each case including portions thereof.
+      1.4. “Executable” means the Covered Software in any form other than Source Code.
+      1.5. “Initial Developer” means the individual or entity that first makes Original Software available under this License.
+      1.6. “Larger Work” means a work which combines Covered Software or portions thereof with code not governed by the terms of this License.
+      1.7. “License” means this document.
+      1.8. “Licensable” means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein.
+      1.9. “Modifications” means the Source Code and Executable form of any of the following:
+      A. Any file that results from an addition to, deletion from or modification of the contents of a file containing Original Software or previous Modifications;
+      B. Any new file that contains any part of the Original Software or previous Modification; or
+      C. Any new file that is contributed or otherwise made available under the terms of this License.
+      1.10. “Original Software” means the Source Code and Executable form of computer software code that is originally released under this License.
+      1.11. “Patent Claims” means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor.
+      1.12. “Source Code” means (a) the common form of computer software code in which modifications are made and (b) associated documentation included in or with such code.
+      1.13. “You” (or “Your”) means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, “You” includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, “control” means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity.
+      2. License Grants.
+
+      2.1. The Initial Developer Grant.
+      Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, the Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license:
+      (a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer, to use, reproduce, modify, display, perform, sublicense and distribute the Original Software (or portions thereof), with or without Modifications, and/or as part of a Larger Work; and
+      (b) under Patent Claims infringed by the making, using or selling of Original Software, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Software (or portions thereof).
+      (c) The licenses granted in Sections 2.1(a) and (b) are effective on the date Initial Developer first distributes or otherwise makes the Original Software available to a third party under the terms of this License.
+      (d) Notwithstanding Section 2.1(b) above, no patent license is granted: (1) for code that You delete from the Original Software, or (2) for infringements caused by: (i) the modification of the Original Software, or (ii) the combination of the Original Software with other software or devices.
+      2.2. Contributor Grant.
+      Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license:
+      (a) under intellectual property rights (other than patent or trademark) Licensable by Contributor to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof), either on an unmodified basis, with other Modifications, as Covered Software and/or as part of a Larger Work; and
+      (b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: (1) Modifications made by that Contributor (or portions thereof); and (2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination).
+      (c) The licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first distributes or otherwise makes the Modifications available to a third party.
+      (d) Notwithstanding Section 2.2(b) above, no patent license is granted: (1) for any code that Contributor has deleted from the Contributor Version; (2) for infringements caused by: (i) third party modifications of Contributor Version, or (ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or (3) under Patent Claims infringed by Covered Software in the absence of Modifications made by that Contributor.
+      3. Distribution Obligations.
+
+      3.1. Availability of Source Code.
+      Any Covered Software that You distribute or otherwise make available in Executable form must also be made available in Source Code form and that Source Code form must be distributed only under the terms of this License. You must include a copy of this License with every copy of the Source Code form of the Covered Software You distribute or otherwise make available. You must inform recipients of any such Covered Software in Executable form as to how they can obtain such Covered Software in Source Code form in a reasonable manner on or through a medium customarily used for software exchange.
+      3.2. Modifications.
+      The Modifications that You create or to which You contribute are governed by the terms of this License. You represent that You believe Your Modifications are Your original creation(s) and/or You have sufficient rights to grant the rights conveyed by this License.
+      3.3. Required Notices.
+      You must include a notice in each of Your Modifications that identifies You as the Contributor of the Modification. You may not remove or alter any copyright, patent or trademark notices contained within the Covered Software, or any notices of licensing or any descriptive text giving attribution to any Contributor or the Initial Developer.
+      3.4. Application of Additional Terms.
+      You may not offer or impose any terms on any Covered Software in Source Code form that alters or restricts the applicable version of this License or the recipients' rights hereunder. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, you may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear that any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer.
+      3.5. Distribution of Executable Versions.
+      You may distribute the Executable form of the Covered Software under the terms of this License or under the terms of a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable form does not attempt to limit or alter the recipient's rights in the Source Code form from the rights set forth in this License. If You distribute the Covered Software in Executable form under a different license, You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer.
+      3.6. Larger Works.
+      You may create a Larger Work by combining Covered Software with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Software.
+      4. Versions of the License.
+
+      4.1. New Versions.
+      Oracle is the initial license steward and may publish revised and/or new versions of this License from time to time. Each version will be given a distinguishing version number. Except as provided in Section 4.3, no one other than the license steward has the right to modify this License.
+      4.2. Effect of New Versions.
+      You may always continue to use, distribute or otherwise make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. If the Initial Developer includes a notice in the Original Software prohibiting it from being distributed or otherwise made available under any subsequent version of the License, You must distribute and make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. Otherwise, You may also choose to use, distribute or otherwise make the Covered Software available under the terms of any subsequent version of the License published by the license steward.
+      4.3. Modified Versions.
+      When You are an Initial Developer and You want to create a new license for Your Original Software, You may create and use a modified version of this License if You: (a) rename the license and remove any references to the name of the license steward (except to note that the license differs from this License); and (b) otherwise make it clear that the license contains terms which differ from this License.
+      5. DISCLAIMER OF WARRANTY.
+
+      COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN “AS IS” BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+      6. TERMINATION.
+
+      6.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive.
+      6.2. If You assert a patent infringement claim (excluding declaratory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You assert such claim is referred to as “Participant”) alleging that the Participant Software (meaning the Contributor Version where the Participant is a Contributor or the Original Software where the Participant is the Initial Developer) directly or indirectly infringes any patent, then any and all rights granted directly or indirectly to You by such Participant, the Initial Developer (if the Initial Developer is not the Participant) and all Contributors under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively and automatically at the expiration of such 60 day notice period, unless if within such 60 day period You withdraw Your claim with respect to the Participant Software against such Participant either unilaterally or pursuant to a written agreement with Participant.
+      6.3. If You assert a patent infringement claim against Participant alleging that the Participant Software directly or indirectly infringes any patent where such claim is resolved (such as by license or settlement) prior to the initiation of patent infringement litigation, then the reasonable value of the licenses granted by such Participant under Sections 2.1 or 2.2 shall be taken into account in determining the amount or value of any payment or license.
+      6.4. In the event of termination under Sections 6.1 or 6.2 above, all end user licenses that have been validly granted by You or any distributor hereunder prior to termination (excluding licenses granted to You by any distributor) shall survive termination.
+      7. LIMITATION OF LIABILITY.
+
+      UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+      8. U.S. GOVERNMENT END USERS.
+
+      The Covered Software is a “commercial item,” as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of “commercial computer software” (as that term is defined at 48 C.F.R. § 252.227-7014(a)(1)) and “commercial computer software documentation” as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Software with only those rights set forth herein. This U.S. Government Rights clause is in lieu of, and supersedes, any other FAR, DFAR, or other clause or provision that addresses Government rights in computer software under this License.
+
+      9. MISCELLANEOUS.
+
+      This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by the law of the jurisdiction specified in a notice contained within the Original Software (except to the extent applicable law, if any, provides otherwise), excluding such jurisdiction's conflict-of-law provisions. Any litigation relating to this License shall be subject to the jurisdiction of the courts located in the jurisdiction and venue specified in a notice contained within the Original Software, with the losing party responsible for costs, including, without limitation, court costs and reasonable attorneys' fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. You agree that You alone are responsible for compliance with the United States export administration regulations (and the export control laws and regulation of any other countries) when You use, distribute or otherwise make available any Covered Software.
+
+      10. RESPONSIBILITY FOR CLAIMS.
+
+      As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability.
+
+      NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL)
+
+      The code released under the CDDL shall be governed by the laws of the State of California (excluding conflict-of-law provisions). Any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California and the state courts of the State of California, with venue lying in Santa Clara County, California.
+   --
+
+
+   ===
+
+   Component(s):
+
+   - JUnit (http://junit.org)
+     repo/junit-4.11.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+   Are available under the CPL 1.0:
+
+   --
+
+      Common Public License Version 1.0
+      THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON PUBLIC
+      LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM
+      CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+      1. DEFINITIONS
+
+      "Contribution" means:
+
+      a) in the case of the initial Contributor, the initial code and
+      documentation distributed under this Agreement, and
+
+      b) in the case of each subsequent Contributor:
+
+      i) changes to the Program, and
+
+      ii) additions to the Program;
+
+      where such changes and/or additions to the Program originate from and are
+      distributed by that particular Contributor. A Contribution 'originates' from a
+      Contributor if it was added to the Program by such Contributor itself or anyone
+      acting on such Contributor's behalf. Contributions do not include additions to
+      the Program which: (i) are separate modules of software distributed in
+      conjunction with the Program under their own license agreement, and (ii) are not
+      derivative works of the Program.
+
+      "Contributor" means any person or entity that distributes the Program.
+
+      "Licensed Patents " mean patent claims licensable by a Contributor which are
+      necessarily infringed by the use or sale of its Contribution alone or when
+      combined with the Program.
+
+      "Program" means the Contributions distributed in accordance with this Agreement.
+
+      "Recipient" means anyone who receives the Program under this Agreement,
+      including all Contributors.
+
+      2. GRANT OF RIGHTS
+
+      a) Subject to the terms of this Agreement, each Contributor hereby grants
+      Recipient a non-exclusive, worldwide, royalty-free copyright license to
+      reproduce, prepare derivative works of, publicly display, publicly perform,
+      distribute and sublicense the Contribution of such Contributor, if any, and such
+      derivative works, in source code and object code form.
+
+      b) Subject to the terms of this Agreement, each Contributor hereby grants
+      Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed
+      Patents to make, use, sell, offer to sell, import and otherwise transfer the
+      Contribution of such Contributor, if any, in source code and object code form.
+      This patent license shall apply to the combination of the Contribution and the
+      Program if, at the time the Contribution is added by the Contributor, such
+      addition of the Contribution causes such combination to be covered by the
+      Licensed Patents. The patent license shall not apply to any other combinations
+      which include the Contribution. No hardware per se is licensed hereunder.
+
+      c) Recipient understands that although each Contributor grants the licenses
+      to its Contributions set forth herein, no assurances are provided by any
+      Contributor that the Program does not infringe the patent or other intellectual
+      property rights of any other entity. Each Contributor disclaims any liability to
+      Recipient for claims brought by any other entity based on infringement of
+      intellectual property rights or otherwise. As a condition to exercising the
+      rights and licenses granted hereunder, each Recipient hereby assumes sole
+      responsibility to secure any other intellectual property rights needed, if any.
+      For example, if a third party patent license is required to allow Recipient to
+      distribute the Program, it is Recipient's responsibility to acquire that license
+      before distributing the Program.
+
+      d) Each Contributor represents that to its knowledge it has sufficient
+      copyright rights in its Contribution, if any, to grant the copyright license set
+      forth in this Agreement.
+
+      3. REQUIREMENTS
+
+      A Contributor may choose to distribute the Program in object code form under its
+      own license agreement, provided that:
+
+      a) it complies with the terms and conditions of this Agreement; and
+
+      b) its license agreement:
+
+      i) effectively disclaims on behalf of all Contributors all warranties and
+      conditions, express and implied, including warranties or conditions of title and
+      non-infringement, and implied warranties or conditions of merchantability and
+      fitness for a particular purpose;
+
+      ii) effectively excludes on behalf of all Contributors all liability for
+      damages, including direct, indirect, special, incidental and consequential
+      damages, such as lost profits;
+
+      iii) states that any provisions which differ from this Agreement are offered
+      by that Contributor alone and not by any other party; and
+
+      iv) states that source code for the Program is available from such
+      Contributor, and informs licensees how to obtain it in a reasonable manner on or
+      through a medium customarily used for software exchange.
+
+      When the Program is made available in source code form:
+
+      a) it must be made available under this Agreement; and
+
+      b) a copy of this Agreement must be included with each copy of the Program.
+
+      Contributors may not remove or alter any copyright notices contained within the
+      Program.
+
+      Each Contributor must identify itself as the originator of its Contribution, if
+      any, in a manner that reasonably allows subsequent Recipients to identify the
+      originator of the Contribution.
+
+      4. COMMERCIAL DISTRIBUTION
+
+      Commercial distributors of software may accept certain responsibilities with
+      respect to end users, business partners and the like. While this license is
+      intended to facilitate the commercial use of the Program, the Contributor who
+      includes the Program in a commercial product offering should do so in a manner
+      which does not create potential liability for other Contributors. Therefore, if
+      a Contributor includes the Program in a commercial product offering, such
+      Contributor ("Commercial Contributor") hereby agrees to defend and indemnify
+      every other Contributor ("Indemnified Contributor") against any losses, damages
+      and costs (collectively "Losses") arising from claims, lawsuits and other legal
+      actions brought by a third party against the Indemnified Contributor to the
+      extent caused by the acts or omissions of such Commercial Contributor in
+      connection with its distribution of the Program in a commercial product
+      offering. The obligations in this section do not apply to any claims or Losses
+      relating to any actual or alleged intellectual property infringement. In order
+      to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+      Contributor in writing of such claim, and b) allow the Commercial Contributor to
+      control, and cooperate with the Commercial Contributor in, the defense and any
+      related settlement negotiations. The Indemnified Contributor may participate in
+      any such claim at its own expense.
+
+      For example, a Contributor might include the Program in a commercial product
+      offering, Product X. That Contributor is then a Commercial Contributor. If that
+      Commercial Contributor then makes performance claims, or offers warranties
+      related to Product X, those performance claims and warranties are such
+      Commercial Contributor's responsibility alone. Under this section, the
+      Commercial Contributor would have to defend claims against the other
+      Contributors related to those performance claims and warranties, and if a court
+      requires any other Contributor to pay any damages as a result, the Commercial
+      Contributor must pay those damages.
+
+      5. NO WARRANTY
+
+      EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED 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. Each
+      Recipient is solely responsible for determining the appropriateness of using and
+      distributing the Program and assumes all risks associated with its exercise of
+      rights under this Agreement, including but not limited to the risks and costs of
+      program errors, compliance with applicable laws, damage to or loss of data,
+      programs or equipment, and unavailability or interruption of operations.
+
+      6. DISCLAIMER OF LIABILITY
+
+      EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY
+      CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+      SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST
+      PROFITS), 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 OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS
+      GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+      7. GENERAL
+
+      If any provision of this Agreement is invalid or unenforceable under applicable
+      law, it shall not affect the validity or enforceability of the remainder of the
+      terms of this Agreement, and without further action by the parties hereto, such
+      provision shall be reformed to the minimum extent necessary to make such
+      provision valid and enforceable.
+
+      If Recipient institutes patent litigation against a Contributor with respect to
+      a patent applicable to software (including a cross-claim or counterclaim in a
+      lawsuit), then any patent licenses granted by that Contributor to such Recipient
+      under this Agreement shall terminate as of the date such litigation is filed. In
+      addition, if Recipient institutes patent litigation against any entity
+      (including a cross-claim or counterclaim in a lawsuit) alleging that the Program
+      itself (excluding combinations of the Program with other software or hardware)
+      infringes such Recipient's patent(s), then such Recipient's rights granted under
+      Section 2(b) shall terminate as of the date such litigation is filed.
+
+      All Recipient's rights under this Agreement shall terminate if it fails to
+      comply with any of the material terms or conditions of this Agreement and does
+      not cure such failure in a reasonable period of time after becoming aware of
+      such noncompliance. If all Recipient's rights under this Agreement terminate,
+      Recipient agrees to cease use and distribution of the Program as soon as
+      reasonably practicable. However, Recipient's obligations under this Agreement
+      and any licenses granted by Recipient relating to the Program shall continue and
+      survive.
+
+      Everyone is permitted to copy and distribute copies of this Agreement, but in
+      order to avoid inconsistency the Agreement is copyrighted and may only be
+      modified in the following manner. The Agreement Steward reserves the right to
+      publish new versions (including revisions) of this Agreement from time to time.
+      No one other than the Agreement Steward has the right to modify this Agreement.
+      IBM is the initial Agreement Steward. IBM may assign the responsibility to serve
+      as the Agreement Steward to a suitable separate entity. Each new version of the
+      Agreement will be given a distinguishing version number. The Program (including
+      Contributions) may always be distributed subject to the version of the Agreement
+      under which it was received. In addition, after a new version of the Agreement
+      is published, Contributor may elect to distribute the Program (including its
+      Contributions) under the new version. Except as expressly stated in Sections
+      2(a) and 2(b) above, Recipient receives no rights or licenses to the
+      intellectual property of any Contributor under this Agreement, whether
+      expressly, by implication, estoppel or otherwise. All rights in the Program not
+      expressly granted under this Agreement are reserved.
+
+      This Agreement is governed by the laws of the State of New York and the
+      intellectual property laws of the United States of America. No party to this
+      Agreement will bring a legal action under this Agreement more than one year
+      after the cause of action arose. Each party waives its rights to a jury trial in
+      any resulting litigation.
+      --
+
+      ===
+      Component(s)
+
+      - SLF4J JCL Binding (http://www.slf4j.org) 
+        repo/slf4j-jcl-1.6.3.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+      - SLF4J LOG4J-12 Binding (http://www.slf4j.org)
+        repo/slf4j-log4j12-1.7.5.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+      - SLF4J API Module (http://www.slf4j.org/slf4j-api)
+        repo/slf4j-api-1.6.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+      are provided under the MIT license:
+
+      --
+      Copyright (c) 2004-2013 QOS.ch
+       All rights reserved.
+
+       Permission is hereby granted, free  of charge, to any person obtaining
+       a  copy  of this  software  and  associated  documentation files  (the
+       "Software"), to  deal in  the Software without  restriction, including
+       without limitation  the rights to  use, copy, modify,  merge, publish,
+       distribute,  sublicense, and/or sell  copies of  the Software,  and to
+       permit persons to whom the Software  is furnished to do so, subject to
+       the following conditions:
+       
+       The  above  copyright  notice  and  this permission  notice  shall  be
+       included in all copies or substantial portions of the Software.
+       
+       THE  SOFTWARE IS  PROVIDED  "AS  IS", WITHOUT  WARRANTY  OF ANY  KIND,
+       EXPRESS OR  IMPLIED, INCLUDING  BUT NOT LIMITED  TO THE  WARRANTIES OF
+       MERCHANTABILITY,    FITNESS    FOR    A   PARTICULAR    PURPOSE    AND
+       NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+       LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+       OF CONTRACT, TORT OR OTHERWISE,  ARISING FROM, OUT OF OR IN CONNECTION
+       WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+   --
+
+   ===
+   Component(s):
+   - antlr-runtime (http://www.antlr.org/antlr-runtime)
+     repo/antlr-runtime-3.4.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+   - ANTLR ST4 4.0.4 (http://www.stringtemplate.org)
+     repo/ST4-4.0.4.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+   - ANTLR StringTemplate (http://www.stringtemplate.org)
+     repo/stringtemplate-3.2.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+   - AntLR Parser Generator (http://www.antlr.org/)
+     repo/antlr-2.7.7.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+   Are available under a  BSD-style License:
+
+   --
+      Copyright (c) 2012 Terence Parr and Sam Harwell
+      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 the author 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.
+   --
+
+   ===
+   Component(s):
+   - JSch (http://www.jcraft.com/jsch/) 
+     repo/jsch-0.1.42.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+   are available under a BSD-style license:
+
+   --
+      JSch 0.0.* was released under the GNU LGPL license.  Later, we have switched 
+      over to a BSD-style license. 
+
+      ------------------------------------------------------------------------------
+      Copyright (c) 2002-2015 Atsuhiko Yamanaka, JCraft,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:
+
+        1. Redistributions of source code must retain the above copyright notice,
+           this list of conditions and the following disclaimer.
+
+        2. 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.
+
+        3. The names of the authors may not be used to endorse or promote products
+           derived from this software without specific prior written permission.
+
+      THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 JCRAFT,
+      INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE 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.
+   --
+
+   ===
+   Component(s):
+   - StAX Utilities (http://stax-utils.dev.java.net/stax-utils)
+     net.java.dev.stax-utils:stax-utils:jar:20060502:compile
+
+   are available under a BSD-style license::
+
+   --
+      Copyright (c) 2004, Christian Niles, unit12.net
+      Copyright (c) 2004, Sun Microsystems, Inc.
+      Copyright (c) 2006, John Kristian 
+      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 the listed copyright holders 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.
+   --
+
+   ===
+   Component(s):
+   - ParaNamer Core (http://paranamer.codehaus.org/paranamer) 
+     repo/paranamer-2.3.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+   are available under a BSD-style license:
+
+   --
+      [ ParaNamer used to be 'Pubic Domain', but since it includes a small piece of ASM it is now the same license as that: BSD ]
+
+       Copyright (c) 2006 Paul Hammant & ThoughtWorks 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:
+       1. Redistributions of source code must retain the above copyright
+          notice, this list of conditions and the following disclaimer.
+       2. 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.
+       3. Neither the name of the copyright holders 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
+   --
+
+   ===
+   Component(s):
+   - JDOM
+     repo/jdom-1.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+   are available under a Modified ASL license:
+   --
+      /*-- 
+
+       $Id: LICENSE.txt,v 1.11 2004/02/06 09:32:57 jhunter Exp $
+
+       Copyright (C) 2000-2004 Jason Hunter & Brett McLaughlin.
+       All rights reserved.
+       
+       Redistribution and use in source and binary forms, with or without
+       modification, are permitted provided that the following conditions
+       are met:
+       
+       1. Redistributions of source code must retain the above copyright
+          notice, this list of conditions, and the following disclaimer.
+       
+       2. Redistributions in binary form must reproduce the above copyright
+          notice, this list of conditions, and the disclaimer that follows 
+          these conditions in the documentation and/or other materials 
+          provided with the distribution.
+
+       3. The name "JDOM" must not be used to endorse or promote products
+          derived from this software without prior written permission.  For
+          written permission, please contact <request_AT_jdom_DOT_org>.
+       
+       4. Products derived from this software may not be called "JDOM", nor
+          may "JDOM" appear in their name, without prior written permission
+          from the JDOM Project Management <request_AT_jdom_DOT_org>.
+       
+       In addition, we request (but do not require) that you include in the 
+       end-user documentation provided with the redistribution and/or in the 
+       software itself an acknowledgement equivalent to the following:
+           "This product includes software developed by the
+            JDOM Project (http://www.jdom.org/)."
+       Alternatively, the acknowledgment may be graphical using the logos 
+       available at http://www.jdom.org/images/logos.
+
+       THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 JDOM AUTHORS OR THE PROJECT
+       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.
+
+       This software consists of voluntary contributions made by many 
+       individuals on behalf of the JDOM Project and was originally 
+       created by Jason Hunter <jhunter_AT_jdom_DOT_org> and
+       Brett McLaughlin <brett_AT_jdom_DOT_org>.  For more information
+       on the JDOM Project, please see <http://www.jdom.org/>. 
+
+    */
+   --
+
+   ===
+   Component(s):
+   - Hamcrest Core (https://github.com/hamcrest/JavaHamcrest/hamcrest-core) 
+     repo/hamcrest-core-1.3.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+   are available under a BSD-style license
+   --
+      BSD License
+
+      Copyright (c) 2000-2006, www.hamcrest.org
+      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 Hamcrest 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.
+   --
+
+   ===
+   Component(s):
+   - Protocol Buffer Java API (http://code.google.com/p/protobuf) 
+     repo/prtobuf-java-2.5.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+   are available under a BSD-style license:
+
+   --
+      This license applies to all parts of Protocol Buffers except the following:
+
+        - Atomicops support for generic gcc, located in
+          src/google/protobuf/stubs/atomicops_internals_generic_gcc.h.
+          This file is copyrighted by Red Hat Inc.
+
+        - Atomicops support for AIX/POWER, located in
+          src/google/protobuf/stubs/atomicops_internals_power.h.
+          This file is copyrighted by Bloomberg Finance LP.
+
+      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.
+   --
+
+   ===
+   Component(s):
+   - JSON (JavaScript Object Notation) (http://www.json.org/java/index.html) 
+     repo/json-20090211.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+   are available under the JSON license:
+
+   --
+      Copyright (c) 2002 JSON.org
+
+      Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+      The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+      The Software shall be used for Good, not Evil.
+
+      THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+   --
+
+   ===
+   Component(s):
+   - XZ for Java (http://tukaani.org/xz/java.html) 
+     repo/xz-1.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+   - XML Pull Parsing API (http://aopalliance.sourceforge.net/aopalliance) 
+     repo/aopalliance-1.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+   are in the public domain.
+
+   ===
+
+   Component(s):
+   - JLine (http://jline.sourceforge.net) 
+     repo/jline-0.9.94.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+   are available under a BSD-style license:
+   --
+
+      Copyright (c) 2002-2006, Marc Prud'hommeaux <mwp1@cornell.edu>
+      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 JLine 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.
+   --
+
+   ===
+   Component(s):
+
+   - xmlenc Library (http://xmlenc.sourceforge.net) 
+     repo/xmlenc-0.52.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+   are available under a BSD-style license:
+
+   --
+      Copyright 2003-2005, Ernst de Haan <wfe.dehaan@gmail.com>
+      All rights reserved.
+
+      Redistribution and use in source and binary forms, with or without
+      modification, are permitted provided that the following conditions are met:
+
+      1. Redistributions of source code must retain the above copyright notice, this
+         list of conditions and the following disclaimer.
+
+      2. 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.
+
+      3. Neither the name of the copyright holder 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 HOLDER 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.
+   --
+
+   ===
+   Component(s):
+   - Appassembler :: Generic Bootstrapper (http://mojo.codehaus.org/appassembler/appassembler-booter) 
+     repo/appassembler-booter-1.3.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+   - Appassembler :: Model (http://mojo.codehaus.org/appassembler/appassembler-model) 
+     repo/appassembler-model-1.3.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+   are available under the MIT license:
+
+   --
+      The MIT License
+
+      Copyright 2006-2012 The Codehaus.
+
+      Permission is hereby granted, free of charge, to any person obtaining a copy of
+      this software and associated documentation files \(the "Software"\), to deal in
+      the Software without restriction, including without limitation the rights to
+      use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+      of the Software, and to permit persons to whom the Software is furnished to do
+      so, subject to the following conditions:
+
+      The above copyright notice and this permission notice shall be included in all
+      copies or substantial portions of the Software.
+
+      THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+      IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+      FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+      AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+      LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+      OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+      SOFTWARE.
+   --
+
+   ===
+   Component(s):
+
+   - args4j (http://args4j.dev.java.net/args4j/) 
+     repo/args4j-2.0.12.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+   are available under the MIT License:
+
+   --
+      Copyright (c) 2003, Kohsuke Kawaguchi
+
+      Permission is hereby granted, free of charge, to any person
+      obtaining a copy of this software and associated documentation
+      files (the "Software"), to deal in the Software without
+      restriction, including without limitation the rights to use,
+      copy, modify, merge, publish, distribute, sublicense, and/or sell
+      copies of the Software, and to permit persons to whom the
+      Software is furnished to do so, subject to the following
+      conditions:
+
+      The above copyright notice and this permission notice shall be
+      included in all copies or substantial portions of the Software.
+
+      THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+      EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+      OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+      NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+      HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+      WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+      FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+      OTHER DEALINGS IN THE SOFTWARE.
+   --
+
+   ===
+   Component(s)
+   - ASM Core (http://asm.objectweb.org/asm/) 
+     repo/asm-3.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+   are available under a BSD-style license:
+
+   --
+      Copyright (c) 2000-2011 INRIA, France Telecom
+      All rights reserved.
+
+      Redistribution and use in source and binary forms, with or without
+      modification, are permitted provided that the following conditions
+      are met:
+
+      1. Redistributions of source code must retain the above copyright
+         notice, this list of conditions and the following disclaimer.
+
+      2. 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.
+
+      3. Neither the name of the copyright holders 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.
+   --
+
+
+   ===
+   Component(s)
+   - Plexus Utils (http://asm.objectweb.org/asm/) 
+     repo/plexus-utils-3.0.7.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    contain components under a BSD-style license:
+
+   --
+    /********************************************************************************
+     * CruiseControl, a Continuous Integration Toolkit
+     * Copyright (c) 2001-2003, ThoughtWorks, Inc.
+     * 651 W Washington Ave. Suite 500
+     * Chicago, IL 60661 USA
+     * 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 ThoughtWorks, Inc., CruiseControl, 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 REGENTS 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.
+     ********************************************************************************/
+   --
+
+   ===
+   Component(s)
+   - Plexus Utils (http://asm.objectweb.org/asm/) 
+     repo/plexus-utils-3.0.7.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    contain components under a BSD-style license:
+
+   --
+    Javolution - Java(TM) Solution for Real-Time and Embedded Systems
+    Copyright (c) 2006, Javolution (http://javolution.org)
+    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.
+
+    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.
+   --
+
+   ===
+   Component(s)
+   - Plexus Utils (http://asm.objectweb.org/asm/) 
+     repo/plexus-utils-3.0.7.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    contain components under the Indiana University Extreme! Lab Software License:
+
+   --
+    Indiana University Extreme! Lab Software License
+
+    Version 1.1.1
+
+    Copyright (c) 2002 Extreme! Lab, Indiana University. All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without 
+    modification, are permitted provided that the following conditions 
+    are met:
+
+    1. Redistributions of source code must retain the above copyright notice, 
+       this list of conditions and the following disclaimer.
+
+    2. 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.
+
+    3. The end-user documentation included with the redistribution, if any, 
+       must include the following acknowledgment:
+
+      "This product includes software developed by the Indiana University 
+      Extreme! Lab (http://www.extreme.indiana.edu/)."
+
+    Alternately, this acknowledgment may appear in the software itself, 
+    if and wherever such third-party acknowledgments normally appear.
+
+    4. The names "Indiana Univeristy" and "Indiana Univeristy Extreme! Lab" 
+    must not be used to endorse or promote products derived from this 
+    software without prior written permission. For written permission, 
+    please contact http://www.extreme.indiana.edu/.
+
+    5. Products derived from this software may not use "Indiana Univeristy" 
+    name nor may "Indiana Univeristy" appear in their name, without prior 
+    written permission of the Indiana University.
+
+    THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED 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 AUTHORS, COPYRIGHT HOLDERS OR ITS 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.
+   --
+===
+
+
+For portions of the AsterixDB WebUI in:
+repo/asterix-app-0.8.8.jar, within
+asterix/asterix-server-0.8.8-binary-assembly.zip, within this assembly
+located at:
+
+ webui/static/js/jquery.min.js
+and
+ webui/static/js/jquery.autosize-min.js
+
+are available under a MIT-style license
+--
+
+   Copyright jQuery Foundation and other contributors, https://jquery.org/
+
+   This software consists of voluntary contributions made by many
+   individuals. For exact contribution history, see the revision history
+   available at https://github.com/jquery/jquery
+
+   The following license applies to all parts of this software except as
+   documented below:
+
+   ====
+
+   Permission is hereby granted, free of charge, to any person obtaining
+   a copy of this software and associated documentation files (the
+   "Software"), to deal in the Software without restriction, including
+   without limitation the rights to use, copy, modify, merge, publish,
+   distribute, sublicense, and/or sell copies of the Software, and to
+   permit persons to whom the Software is furnished to do so, subject to
+   the following conditions:
+
+   The above copyright notice and this permission notice shall be
+   included in all copies or substantial portions of the Software.
+
+   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+   LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+   OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+   WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+   ====
+
+   All files located in the node_modules and external directories are
+   externally maintained libraries used by this software which have their
+   own licenses; we recommend you read them, as their terms may differ from
+   the terms above.
+
+as well as portions of the WebUI at:
+webui/static/js/bootstrap.min.js
+
+   The MIT License (MIT)
+
+   Copyright (c) 2011-2015 Twitter, Inc
+
+   Permission is hereby granted, free of charge, to any person obtaining a copy
+   of this software and associated documentation files (the "Software"), to deal
+   in the Software without restriction, including without limitation the rights
+   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+   copies of the Software, and to permit persons to whom the Software is
+   furnished to do so, subject to the following conditions:
+
+   The above copyright notice and this permission notice shall be included in
+   all copies or substantial portions of the Software.
+
+   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+   AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+   LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+   OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+   THE SOFTWARE.
+
+
+and portions of the WebUI at:
+webui/static/js/smoothie.js
+
+   MIT License
+   -----------
+
+   Copyright (c) 2010-2013, Joe Walnes
+                 2013-2014, Drew Noakes
+
+                 Permission is hereby granted, free of charge, to any person obtaining a copy
+                 of this software and associated documentation files (the "Software"), to deal
+                 in the Software without restriction, including without limitation the rights
+                 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+                 copies of the Software, and to permit persons to whom the Software is
+                 furnished to do so, subject to the following conditions:
+
+                 The above copyright notice and this permission notice shall be included in
+                 all copies or substantial portions of the Software.
+
+                 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+                 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+                 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+                 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+                 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+                 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+                 THE SOFTWARE.
diff --git a/hyracks/hyracks-examples/text-example/textclient/src/main/licenses/NOTICE b/hyracks/hyracks-examples/text-example/textclient/src/main/licenses/NOTICE
new file mode 100644
index 0000000..2612883
--- /dev/null
+++ b/hyracks/hyracks-examples/text-example/textclient/src/main/licenses/NOTICE
@@ -0,0 +1,403 @@
+Apache AsterixDB
+Copyright 2016 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+AsterixDB utilizes many libraries, which come with the following applicable NOTICE(s):
+
+ - repo/algebricks-common-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    algebricks-common
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/algebricks-compiler-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    algebricks-compiler
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/algebricks-core-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    algebricks-core
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/algebricks-data-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    algebricks-data
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/algebricks-rewriter-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    algebricks-rewriter
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/algebricks-runtime-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    algebricks-runtime
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/asterix-algebra-0.8.8-SNAPSHOT.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    asterix-algebra
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/asterix-app-0.8.8-SNAPSHOT.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    asterix-app
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/asterix-aql-0.8.8-SNAPSHOT.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    asterix-aql
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/asterix-common-0.8.8-SNAPSHOT.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    asterix-common
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/asterix-events-0.8.8-SNAPSHOT.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    asterix-events
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/asterix-external-data-0.8.8-SNAPSHOT.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    asterix-external-data
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/asterix-fuzzyjoin-0.8.8-SNAPSHOT.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    asterix-fuzzyjoin
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/asterix-metadata-0.8.8-SNAPSHOT.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    asterix-metadata
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/asterix-om-0.8.8-SNAPSHOT.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    asterix-om
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/asterix-runtime-0.8.8-SNAPSHOT.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    asterix-runtime
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/asterix-server-0.8.8-SNAPSHOT.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    asterix-server
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/asterix-tools-0.8.8-SNAPSHOT.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    asterix-tools
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/asterix-transactions-0.8.8-SNAPSHOT.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    asterix-transactions
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/avro-1.7.4.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    Apache Avro
+    Copyright 2009-2013 The Apache Software Foundation
+
+ - repo/commons-logging-1.1.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    Commons Logging
+    Copyright 2001-2007 The Apache Software Foundation
+
+ - repo/derby-10.10.1.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    Apache Derby
+    Copyright 2004-2013 The Apache Software Foundation
+
+    =========================================================================
+
+        Portions of Derby were originally developed by
+        International Business Machines Corporation and are
+    licensed to the Apache Software Foundation under the
+    "Software Grant and Corporate Contribution License Agreement",
+    informally known as the "Derby CLA".
+    The following copyright notice(s) were affixed to portions of the code
+    with which this file is now or was at one time distributed
+    and are placed here unaltered.
+
+    (C) Copyright 1997,2004 International Business Machines Corporation.  All rights reserved.
+
+    (C) Copyright IBM Corp. 2003. 
+
+
+    =========================================================================
+
+
+    The JDBC apis for small devices and JDBC3 (under java/stubs/jsr169 and
+    java/stubs/jdbc3) were produced by trimming sources supplied by the
+    Apache Harmony project. In addition, the Harmony SerialBlob and
+    SerialClob implementations are used. The following notice covers the Harmony sources:
+
+    Portions of Harmony were originally developed by
+    Intel Corporation and are licensed to the Apache Software
+    Foundation under the "Software Grant and Corporate Contribution
+    License Agreement", informally known as the "Intel Harmony CLA".
+
+
+ - repo/guice-3.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    Google Guice - Core Library
+    Copyright 2006-2011 Google, Inc.
+
+ - repo/guice-servlet-3.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    Google Guice - Extensions - Servlet
+    Copyright 2006-2011 Google, Inc.
+
+ - repo/hive-ant-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    Hive Ant Utilities
+    Copyright 2014 The Apache Software Foundation
+
+ - repo/hive-common-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    Hive Common
+    Copyright 2014 The Apache Software Foundation
+
+ - repo/hive-exec-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    Hive Query Language
+    Copyright 2014 The Apache Software Foundation
+
+ - repo/hive-metastore-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    Hive Metastore
+    Copyright 2014 The Apache Software Foundation
+
+ - repo/hive-serde-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    Hive Serde
+    Copyright 2014 The Apache Software Foundation
+
+ - repo/hive-shims-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    Hive Shims
+    Copyright 2014 The Apache Software Foundation
+
+ - repo/hive-shims-0.20-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    Hive Shims 0.20
+    Copyright 2014 The Apache Software Foundation
+
+ - repo/hive-shims-0.20S-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    Hive Shims 0.20S
+    Copyright 2014 The Apache Software Foundation
+
+ - repo/hive-shims-0.23-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    Hive Shims 0.23
+    Copyright 2014 The Apache Software Foundation
+
+ - repo/hive-shims-common-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    Hive Shims Common
+    Copyright 2014 The Apache Software Foundation
+
+ - repo/hive-shims-common-secure-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    Hive Shims Secure Common
+    Copyright 2014 The Apache Software Foundation
+
+ - repo/hyracks-api-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    hyracks-api
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/hyracks-client-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    hyracks-client
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/hyracks-comm-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    hyracks-comm
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/hyracks-control-cc-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    hyracks-control-cc
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/hyracks-control-common-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    hyracks-control-common
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/hyracks-control-nc-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    hyracks-control-nc
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/hyracks-dataflow-common-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    hyracks-dataflow-common
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/hyracks-dataflow-std-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    hyracks-dataflow-std
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/hyracks-data-std-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    hyracks-data-std
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/hyracks-hdfs-2.x-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    hyracks-hdfs-2.x
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/hyracks-hdfs-core-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    hyracks-hdfs-core
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/hyracks-ipc-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    hyracks-ipc
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/hyracks-net-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    hyracks-net
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/hyracks-storage-am-bloomfilter-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    hyracks-storage-am-bloomfilter
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/hyracks-storage-am-btree-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    hyracks-storage-am-btree
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/hyracks-storage-am-common-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    hyracks-storage-am-common
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/hyracks-storage-am-lsm-btree-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    hyracks-storage-am-lsm-btree
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/hyracks-storage-am-lsm-common-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    hyracks-storage-am-lsm-common
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/hyracks-storage-am-lsm-invertedindex-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    hyracks-storage-am-lsm-invertedindex
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/hyracks-storage-am-lsm-rtree-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    hyracks-storage-am-lsm-rtree
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/hyracks-storage-am-rtree-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    hyracks-storage-am-rtree
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/hyracks-storage-common-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    hyracks-storage-common
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/plexus-utils-3.0.7.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    This product includes software developed by the Indiana University 
+    Extreme! Lab (http://www.extreme.indiana.edu/)
+
+    This product includes software developed by
+    ThoughtWorks (http://www.thoughtworks.com).
+
+    This product includes software developed by
+    javolution (http://javolution.org/).
+
+    This product includes software developed by
+    Rome (https://rome.dev.java.net/).
+
+- repo/velocity-1.5.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    Apache Velocity
+    Copyright (C) 2000-2007 The Apache Software Foundation
+
+ - repo/wicket-core-1.5.2.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+   Apache Wicket
+   Copyright 2006-2011 Apache Software Foundation
+
+   This product includes software from QOS.ch (http://slf4j.org) licensed under the X11 license
+   Copyright (c) 2004-2008 QOS.ch
+
+   Contains Diff library from Mavens JRCS, released under
+   The Apache Software License, Version 1.1.
+   (c) 1999-2003
+
+   org.apache.wicket.markup.html.form.upload.MultiFileUploadField.js is taken from [1]
+   and has the following notice:
+      "Licence:
+       Use this however/wherever you like, just don't blame me if it breaks
+       anything.
+
+       Credit:
+       If you're nice, you'll leave this bit:
+
+       Class by Stickman -- http://www.the-stickman.com
+       with thanks to:
+       [for Safari fixes]
+          Luis Torrefranca -- http://www.law.pitt.edu
+          and
+          Shawn Parker & John Pennypacker -- http://www.fuzzycoconut.com
+       [for duplicate name bug]
+          'neal'"
+   [1]: http://the-stickman.com/web-development/javascript/upload-multiple-files-with-a-single-file-element/
+ - repo/wicket-request-1.5.2.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    Wicket Request
+    Copyright 2006-2011 Apache Software Foundation
+
+ - repo/wicket-util-1.5.2.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    Wicket Util
+    Copyright 2006-2011 Apache Software Foundation
+
+ - repo/xercesImpl-2.9.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+   Apache Xerces Java
+   Copyright 1999-2007 The Apache Software Foundation
+
+   Portions of this software were originally based on the following:
+     - software copyright (c) 1999, IBM Corporation., http://www.ibm.com.
+     - software copyright (c) 1999, Sun Microsystems., http://www.sun.com.
+     - voluntary contributions made by Paul Eng on behalf of the 
+       Apache Software Foundation that were originally developed at iClick, Inc.,
+       software copyright (c) 1999.
+
+ - repo/xml-apis-1.3.04.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+   Apache XML Commons XML APIs
+   Copyright 2006 The Apache Software Foundation.
+
+
+   Portions of this software were originally based on the following:
+     - software copyright (c) 1999, IBM Corporation., http://www.ibm.com.
+     - software copyright (c) 1999, Sun Microsystems., http://www.sun.com.
+     - software copyright (c) 2000 World Wide Web Consortium, http://www.w3.org
diff --git a/hyracks/hyracks-examples/text-example/textserver/src/main/assembly/binary-assembly.xml b/hyracks/hyracks-examples/text-example/textserver/src/main/assembly/binary-assembly.xml
index 7ef6fd0..36a55b3 100644
--- a/hyracks/hyracks-examples/text-example/textserver/src/main/assembly/binary-assembly.xml
+++ b/hyracks/hyracks-examples/text-example/textserver/src/main/assembly/binary-assembly.xml
@@ -42,11 +42,17 @@
       <directory>target/classes/META-INF</directory>
       <outputDirectory>.</outputDirectory>
       <includes>
-        <include>LICENSE*</include>
-        <include>NOTICE*</include>
         <include>DISCLAIMER*</include>
         <include>DEPENDENCIES*</include>
       </includes>
     </fileSet>
- </fileSets>
+    <fileSet>
+      <directory>src/main/licenses</directory>
+      <outputDirectory>.</outputDirectory>
+      <includes>
+        <include>LICENSE*</include>
+        <include>NOTICE*</include>
+      </includes>
+    </fileSet>
+</fileSets>
 </assembly>
diff --git a/hyracks/hyracks-examples/text-example/textserver/src/main/licenses/LICENSE b/hyracks/hyracks-examples/text-example/textserver/src/main/licenses/LICENSE
new file mode 100644
index 0000000..7974129
--- /dev/null
+++ b/hyracks/hyracks-examples/text-example/textserver/src/main/licenses/LICENSE
@@ -0,0 +1,1739 @@
+
+                                 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.
+
+
+   ASTERIXDB COMPONENTS:
+
+   AsterixDB 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 condition of the following
+   licenses.
+
+   Components under Apache License 2.0 are as follows:
+
+     - Apache Derby Database Engine and Embedded JDBC Driver (http://db.apache.org/derby/derby/)
+       repo/derby-10.10.1.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - JDO API (http://db.apache.org/jdo)
+       repo/jdo-api-3.0.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Rome HTTP Fetcher
+       repo/rome-fetcher-1.0.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - An open source Java toolkit for Amazon S3 (http://jets3t.s3.amazonaws.com/index.html)
+       repo/jets3t-0.6.1 in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - The Netty Project (http://www.jboss.org/netty/)
+       repo/netty-3.2.2.Final.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - The Netty Project (http://netty.io/)
+       repo/netty-3.6.2.Final.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - HttpClient (http://jakarta.apache.org/commons/httpclient/)
+       repo/commons-httpclient-3.0.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - HttpClient (http://hc.apache.org/httpcomponents-client)
+       repo/httpclient-4.3.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - HttpCore (http://hc.apache.org/httpcomponents-core-ga)
+       repo/httpcore-4.3.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - twitter4j-core (http://twitter4j.org/)
+       repo/twitter4j-core-4.0.3.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - twitter4j-stream (http://twitter4j.org/)
+       repo/twitter4j-stream-4.0.3.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Jetty :: Continuation (http://www.eclipse.org/jetty/jetty-continuation)
+       repo/jetty-continuation-8.0.0.RC0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Jetty :: Http Utility (http://www.eclipse.org/jetty/jetty-http)
+       repo/jetty-http-8.0.0.RC0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Jetty :: IO Utility (http://www.eclipse.org/jetty/jetty-io)
+       repo/jetty-io-8.0.0.RC0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Jetty :: Security (http://www.eclipse.org/jetty/jetty-security)
+       repo/jetty-security-8.0.0.RC0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Jetty :: Server Core (http://www.eclipse.org/jetty)
+       repo/jetty-server-8.0.0.RC0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Jetty :: Servlet Handling (http://www.eclipse.org/jetty/jetty-servlet)
+       repo/jetty-servlet-8.0.0.RC0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Jetty :: Utilities (http://www.eclipse.org/jetty/jetty-util)
+       repo/jetty-util-8.0.0.RC0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Jetty :: Webapp Application Support (http://www.eclipse.org/jetty/jetty-webapp)
+       repo/jetty-webapp-8.0.0.RC0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Jetty :: XML utilities (http://www.eclipse.org/jetty/jetty-xml)
+       repo/jetty-xml-8.0.0.RC0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Servlet API (http://www.eclipse.org/jetty/jetty-parent/servlet-api)
+       repo/servlet-api-3.0.20100224.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - BoneCP :: Core Library (http://jolbox.com/bonecp)
+       repo/bonecp-0.8.0.RELEASE.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - FindBugs-jsr305 (http://findbugs.sourceforge.net/)
+       repo/jsr305-1.3.9.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Guava: Google Core Libraries for Java (http://code.google.com/p/guava-libraries/guava)
+       repo/guava-18.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - JSON.simple (http://code.google.com/p/json-simple/)
+       repo/json-simple-1.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Microsoft Windows Azure Client API (https://github.com/WindowsAzure/azure-sdk-for-java)
+       repo/microsoft-windowsazure-api-0.4.4.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - javax.inject (http://code.google.com/p/atinject/)
+       repo/javax.inject-1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Apache Thrift (http://thrift.apache.org)
+       repo/libfb303-0.9.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Apache Thrift (http://thrift.apache.org)
+       repo/libthrift-0.9.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - DataNucleus JDO API plugin (http://www.datanucleus.org)
+       repo/datanucleus-api-jdo-3.2.6.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - DataNucleus Core (http://www.datanucleus.org)
+       repo/datanucleus-core-3.2.10.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - DataNucleus RDBMS (http://www.datanucleus.org)
+       repo/datanucleus-rdbms-3.2.9.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - JAXB2 CommonsValue Constructor Plugin (http://java.net/projects/jaxb2-commons/pages/value-constructor)
+       repo/jaxb2-value-constructor-3.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - StAX API (http://stax.codehaus.org/)
+       repo/stax-api-1.0.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - StAX
+       repo/stax-1.1.1-dev.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Wicket Core (http://wicket.apache.org/wicket-core/wicket-core)
+       repo/wicket-core-1.5.2.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Wicket Request (http://maven.apache.org)
+       repo/wicket-request-1.5.2.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Wicket Util (http://maven.apache.org)
+       repo/wicket-util-1.5.2.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Apache Hadoop Annotations
+       repo/hadoop-annotations-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Apache Hadoop Auth
+       repo/hadoop-auth-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Apache Hadoop Client
+       repo/hadoop-client-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Apache Hadoop Common
+       repo/hadoop-common-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Apache Hadoop Common (tests)
+       repo/hadoop-common-2.2.0-tests.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Apache Hadoop HDFS
+       repo/hadoop-hdfs-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Apache Hadoop HDFS
+       repo/hadoop-hdfs-2.2.0-tests.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - hadoop-mapreduce-client-app
+       repo/hadoop-mapreduce-client-app-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - hadoop-mapreduce-client-common
+       repo/hadoop-mapreduce-client-common-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - hadoop-mapreduce-client-core
+       repo/hadoop-mapreduce-client-core-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - hadoop-mapreduce-client-hs
+       repo/hadoop-mapreduce-client-hs-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - hadoop-mapreduce-client-jobclient
+       repo/hadoop-mapreduce-client-jobclient-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - hadoop-mapreduce-client-jobclient
+       repo/hadoop-mapreduce-client-jobclient-2.2.0-tests.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - hadoop-mapreduce-client-shuffle
+       repo/hadoop-mapreduce-client-shuffle-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Apache Hadoop Mini-Cluster
+       repo/hadoop-minicluster-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - zookeeper
+       repo/zookeeper-3.4.5.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - hadoop-yarn-api
+       repo/hadoop-yarn-api-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - hadoop-yarn-client
+       repo/hadoop-yarn-client-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - hadoop-yarn-common
+       repo/hadoop-yarn-common-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - hadoop-yarn-server-common
+       repo/hadoop-yarn-server-common-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - hadoop-yarn-server-nodemanager
+       repo/hadoop-yarn-server-nodemanager-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - hadoop-yarn-server-resourcemanager
+       repo/hadoop-yarn-server-resourcemanager-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - hadoop-yarn-server-tests
+       repo/hadoop-yarn-server-tests-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - hadoop-yarn-server-web-proxy
+       repo/hadoop-yarn-server-web-proxy-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Plexus Common Utilities (http://plexus.codehaus.org/plexus-utils)
+       repo/plexus-utils-3.0.7.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Jettison
+       repo/jettison-1.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Jackson (http://jackson.codehaus.org)
+       repo/jackson-core-asl-1.8.8.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - JAX-RS provider for JSON content type (http://jackson.codehaus.org)
+       repo/jackson-jaxrs-1.8.3.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Data Mapper for Jackson (http://jackson.codehaus.org)
+       repo/jackson-mapper-asl-1.9.12.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Xml Compatibility extensions for Jackson (http://jackson.codehaus.org)
+       repo/jackson-mapper-xc-1.8.3.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Jackson-core (http://wiki.fasterxml.com/JacksonHome)
+       repo/jackson-core-2.2.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Google GuiceCore Library (http://code.google.com/p/google-guice/guice/)
+       repo/guice-3.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Google GuiceExtensionsServlet (http://code.google.com/p/google-guice/extensions-parent/guice-servlet/)
+       repo/guice-servlet-3.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Jetty Server (http://jetty.mortbay.org/)
+       repo/jetty-6.1.26.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Jetty Utilities (http://jetty.mortbay.org/)
+       repo/jetty-util-6.1.26.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Commons Configuration (http://commons.apache.org/${pom.artifactId.substring(8)}/)
+       repo/commons-configuration-1.6.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Digester (http://jakarta.apache.org/commons/digester/)
+       repo/commons-digester-1.8.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - EL (http://jakarta.apache.org/commons/el/)
+       repo/commons-el-1.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Apache Commons BeanUtils
+       repo/commons-beanutils-1.7.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Commons BeanUtils Core (http://commons.apache.org/beanutils/)
+       repo/commons-beanutils-core-1.8.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Commons CLI (http://commons.apache.org/cli/)
+       repo/commons-cli-1.2.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Apache Commons Codec (http://commons.apache.org/codec/commons-codec)
+       repo/commons-codec-1.4.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Apache Commons Collections (http://commons.apache.org/collections/commons-collections)
+       commons-daemon:commons-daemon:jar:1.0.13
+     - Commons Daemon (http://commons.apache.org/daemon/)
+       repo/commons-daemon-1.0.13.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Commons IO (http://commons.apache.org/io/)
+       repo/commons-io-2.4.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Commons Lang (http://commons.apache.org/lang/)
+       repo/commons-lang-2.5.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Apache Commons Logging (http://commons.apache.org/logging)
+       repo/commons-logging-1.0.5.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Apache Commons Logging Api (http://commons.apache.org/logging)
+       repo/commons-logging-api-1.0.4.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Commons Net (http://commons.apache.org/net/)
+       repo/commons-net-3.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Log4j (http://logging.apache.org:80/log4j/1.2/log4j)
+       repo/log4j-1.2.17.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Apache Ant Core (http://ant.apache.org/)
+       repo/ant-1.9.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Apache Ant Launcher (http://ant.apache.org/)
+       repo/ant-launcher-1.9.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Apache Avro (http://avro.apache.org)
+       repo/avro-1.7.5.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Commons Compress (http://commons.apache.org/compress/)
+       repo/commons-compress-1.4.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Commons Lang (http://commons.apache.org/lang/)
+       repo/commons-lang3-3.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Commons Math (http://commons.apache.org/math/)
+       repo/commons-math-2.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Hive Ant Utilities (http://hive.apache.org/hive-ant)
+       repo/hive-ant-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Hive Common (http://hive.apache.org/hive-common)
+       repo/hive-common-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Hive Query Language (http://hive.apache.org/hive-exec)
+       repo/hive-exec-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Hive Metastore (http://hive.apache.org/hive-metastore)
+       repo/hive-metastore-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Hive Serde (http://hive.apache.org/hive-serde)
+       repo/hive-serde-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Hive Shims (http://hive.apache.org/hive-shims)
+       repo/hive-shims-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Hive Shims 0.20 (http://hive.apache.org/hive-shims-0.20)
+       repo/hive-shims-0.20-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Hive Shims 0.20S (http://hive.apache.org/hive-shims-0.20S)
+       repo/hive-shims-0.20S-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Hive Shims 0.23 (http://hive.apache.org/hive-shims-0.23)
+       repo/hive-shims-0.23-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Hive Shims Common (http://hive.apache.org/hive-shims-common)
+       repo/hive-shims-common-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Hive Shims Secure Common (http://hive.apache.org/hive-shims-common-secure)
+       repo/hive-shims-secure-common-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Apache Velocity (http://velocity.apache.org/engine/releases/velocity-1.5/)
+       repo/velocity-1.5.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Jakarta ORO
+       repo/oro-2.0.8.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - ROME
+       repo/rome-1.0.1-modified-01.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - jasper-compiler (http://tomcat.apache.org/jasper-compiler)
+       repo/jasper-compiler-5.5.23.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - jasper-runtime (http://tomcat.apache.org/jasper-runtime)
+       repo/jasper-runtime-5.5.23.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Xerces2 Java Parser (http://xerces.apache.org/xerces2-j)
+       repo/xercesImpl-2.9.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - XML APIs (http://xml.apache.org/commons/components/external/xml-apis)
+       repo/xml-apis-1.3.04.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Groovy (http://groovy.codehaus.org/)
+       repo/groovy-all-2.1.6.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+     - Snappy for Java (http://github.com/xerial/snappy-java/)
+       repo/snappy-java-1.0.4.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+   ===
+
+   Component(s):
+   - Java Servlet API (http://servlet-spec.java.n)
+     repo/javax.servlet-3.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+   - javax.servlet API v.3.0 (http://jcp.org/en/jsr/detail?id=315)
+     repo/servlet-api-2.5.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+   - grizzly-framework (http://grizzly.java.net/grizzly-framework)
+     repo/grizzly-framework-2.1.2.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+   - grizzly-http (http://grizzly.java.net/grizzly-http)
+     repo/grizzly-http-2.1.2.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+   - grizzly-http-server (http://grizzly.java.net/grizzly-http-server)
+     repo/grizzly-http-server-2.1.2.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+   - grizzly-http-servlet (http://grizzly.java.net/grizzly-http-servlet)
+     repo/grizzly-http-servlet-2.1.2.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+   - grizzly-rcm (http://grizzly.java.net/grizzly-rcm)
+     repo/grizzly-rcm-2.1.2.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+   - management-api (http://kenai.com/hg/gmbal~gf_common)
+     repo/management-api-3.0.0-b012.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+   - gmbal-api-only (http://kenai.com/hg/gmbal~master)
+     repo/gmbal-api-only-3.0.0-b023.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+   - JavaBeans Activation Framework (JAF) (http://java.sun.com/products/javabeans/jaf/index.jsp)
+     repo/activation-1.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+   - JavaMail API (https://glassfish.dev.java.net/javaee5/mail/)
+     repo/mail-1.4.5.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+   - Java Servlet API
+     repo/servlet-api-2.5.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+   - Java Transaction API (http://java.sun.com/products/jta/jta)
+     repo/jta-1.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+   - Sun JAXB Reference Implementation Runtime (http://jaxb.java.net/jaxb-impl)
+     repo/jaxb-impl-2.2.3-1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+   - Java Architecture for XML Binding (JAXB API) (https://jaxb.dev.java.net/jaxb-api) 
+     repo/jaxb-api-2.2.2.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+   - Streaming API for XML
+     repo/stax-api-1.0.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+   - jsp-api
+     repo/jsp-api-2.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+
+   are available under the CDDL 1.0
+   --
+      COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0
+
+      1. Definitions.
+
+      1.1. “Contributor” means each individual or entity that creates or contributes to the creation of Modifications.
+
+      1.2. “Contributor Version” means the combination of the Original Software, prior Modifications used by a Contributor (if any), and the Modifications made by that particular Contributor.
+
+      1.3. “Covered Software” means (a) the Original Software, or (b) Modifications, or (c) the combination of files containing Original Software with files containing Modifications, in each case including portions thereof.
+
+      1.4. “Executable” means the Covered Software in any form other than Source Code.
+
+      1.5. “Initial Developer” means the individual or entity that first makes Original Software available under this License.
+
+      1.6. “Larger Work” means a work which combines Covered Software or portions thereof with code not governed by the terms of this License.
+
+      1.7. “License” means this document.
+
+      1.8. “Licensable” means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein.
+
+      1.9. “Modifications” means the Source Code and Executable form of any of the following:
+
+      A. Any file that results from an addition to, deletion from or modification of the contents of a file containing Original Software or previous Modifications;
+
+      B. Any new file that contains any part of the Original Software or previous Modification; or
+
+      C. Any new file that is contributed or otherwise made available under the terms of this License.
+
+      1.10. “Original Software” means the Source Code and Executable form of computer software code that is originally released under this License.
+
+      1.11. “Patent Claims” means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor.
+
+      1.12. “Source Code” means (a) the common form of computer software code in which modifications are made and (b) associated documentation included in or with such code.
+
+      1.13. “You” (or “Your”) means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, “You” includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, “control” means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity.
+
+      2. License Grants.
+
+      2.1. The Initial Developer Grant.
+
+      Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, the Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license:
+
+      (a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer, to use, reproduce, modify, display, perform, sublicense and distribute the Original Software (or portions thereof), with or without Modifications, and/or as part of a Larger Work; and
+
+      (b) under Patent Claims infringed by the making, using or selling of Original Software, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Software (or portions thereof).
+
+      (c) The licenses granted in Sections 2.1(a) and (b) are effective on the date Initial Developer first distributes or otherwise makes the Original Software available to a third party under the terms of this License.
+
+      (d) Notwithstanding Section 2.1(b) above, no patent license is granted: (1) for code that You delete from the Original Software, or (2) for infringements caused by: (i) the modification of the Original Software, or (ii) the combination of the Original Software with other software or devices.
+
+      2.2. Contributor Grant.
+
+      Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license:
+
+      (a) under intellectual property rights (other than patent or trademark) Licensable by Contributor to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof), either on an unmodified basis, with other Modifications, as Covered Software and/or as part of a Larger Work; and
+
+      (b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: (1) Modifications made by that Contributor (or portions thereof); and (2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination).
+
+      (c) The licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first distributes or otherwise makes the Modifications available to a third party.
+
+      (d) Notwithstanding Section 2.2(b) above, no patent license is granted: (1) for any code that Contributor has deleted from the Contributor Version; (2) for infringements caused by: (i) third party modifications of Contributor Version, or (ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or (3) under Patent Claims infringed by Covered Software in the absence of Modifications made by that Contributor.
+
+      3. Distribution Obligations.
+
+      3.1. Availability of Source Code.
+
+      Any Covered Software that You distribute or otherwise make available in Executable form must also be made available in Source Code form and that Source Code form must be distributed only under the terms of this License. You must include a copy of this License with every copy of the Source Code form of the Covered Software You distribute or otherwise make available. You must inform recipients of any such Covered Software in Executable form as to how they can obtain such Covered Software in Source Code form in a reasonable manner on or through a medium customarily used for software exchange.
+
+      3.2. Modifications.
+
+      The Modifications that You create or to which You contribute are governed by the terms of this License. You represent that You believe Your Modifications are Your original creation(s) and/or You have sufficient rights to grant the rights conveyed by this License.
+
+      3.3. Required Notices.
+
+      You must include a notice in each of Your Modifications that identifies You as the Contributor of the Modification. You may not remove or alter any copyright, patent or trademark notices contained within the Covered Software, or any notices of licensing or any descriptive text giving attribution to any Contributor or the Initial Developer.
+
+      3.4. Application of Additional Terms.
+
+      You may not offer or impose any terms on any Covered Software in Source Code form that alters or restricts the applicable version of this License or the recipients’ rights hereunder. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, you may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear that any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer.
+
+      3.5. Distribution of Executable Versions.
+
+      You may distribute the Executable form of the Covered Software under the terms of this License or under the terms of a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable form does not attempt to limit or alter the recipient’s rights in the Source Code form from the rights set forth in this License. If You distribute the Covered Software in Executable form under a different license, You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer.
+
+      3.6. Larger Works.
+
+      You may create a Larger Work by combining Covered Software with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Software.
+
+      4. Versions of the License.
+
+      4.1. New Versions.
+
+      Sun Microsystems, Inc. is the initial license steward and may publish revised and/or new versions of this License from time to time. Each version will be given a distinguishing version number. Except as provided in Section 4.3, no one other than the license steward has the right to modify this License.
+
+      4.2. Effect of New Versions.
+
+      You may always continue to use, distribute or otherwise make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. If the Initial Developer includes a notice in the Original Software prohibiting it from being distributed or otherwise made available under any subsequent version of the License, You must distribute and make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. Otherwise, You may also choose to use, distribute or otherwise make the Covered Software available under the terms of any subsequent version of the License published by the license steward.
+
+      4.3. Modified Versions.
+
+      When You are an Initial Developer and You want to create a new license for Your Original Software, You may create and use a modified version of this License if You: (a) rename the license and remove any references to the name of the license steward (except to note that the license differs from this License); and (b) otherwise make it clear that the license contains terms which differ from this License.
+
+      5. DISCLAIMER OF WARRANTY.
+
+      COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN “AS IS” BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+      6. TERMINATION.
+
+      6.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive.
+
+      6.2. If You assert a patent infringement claim (excluding declaratory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You assert such claim is referred to as “Participant”) alleging that the Participant Software (meaning the Contributor Version where the Participant is a Contributor or the Original Software where the Participant is the Initial Developer) directly or indirectly infringes any patent, then any and all rights granted directly or indirectly to You by such Participant, the Initial Developer (if the Initial Developer is not the Participant) and all Contributors under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively and automatically at the expiration of such 60 day notice period, unless if within such 60 day period You withdraw Your claim with respect to the Participant Software against such Participant either unilaterally or pursuant to a written agreement with Participant.
+
+      6.3. In the event of termination under Sections 6.1 or 6.2 above, all end user licenses that have been validly granted by You or any distributor hereunder prior to termination (excluding licenses granted to You by any distributor) shall survive termination.
+
+      7. LIMITATION OF LIABILITY.
+
+      UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOST PROFITS, LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY’S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+      8. U.S. GOVERNMENT END USERS.
+
+      The Covered Software is a “commercial item,” as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of “commercial computer software” (as that term is defined at 48 C.F.R. § 252.227-7014(a)(1)) and “commercial computer software documentation” as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Software with only those rights set forth herein. This U.S. Government Rights clause is in lieu of, and supersedes, any other FAR, DFAR, or other clause or provision that addresses Government rights in computer software under this License.
+
+      9. MISCELLANEOUS.
+
+      This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by the law of the jurisdiction specified in a notice contained within the Original Software (except to the extent applicable law, if any, provides otherwise), excluding such jurisdiction’s conflict-of-law provisions. Any litigation relating to this License shall be subject to the jurisdiction of the courts located in the jurisdiction and venue specified in a notice contained within the Original Software, with the losing party responsible for costs, including, without limitation, court costs and reasonable attorneys’ fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. You agree that You alone are responsible for compliance with the United States export administration regulations (and the export control laws and regulation of any other countries) when You use, distribute or otherwise make available any Covered Software.
+
+      10. RESPONSIBILITY FOR CLAIMS.
+
+      As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability.
+
+      NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL)
+
+      The code released under the CDDL shall be governed by the laws of the State of California (excluding conflict-of-law provisions). Any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California and the state courts of the State of California, with venue lying in Santa Clara County, California.
+
+
+
+   ==
+
+   Component(s):
+  - jersey-client (https://jersey.java.net/jersey-client/)
+    repo/jersey-client-1.13.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+  - jersey-core (https://jersey.java.net/jersey-core/)
+    repo/jersey-core-1.13.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+  - jersey-grizzly2 (https://jersey.java.net/jersey-grizzly2/)
+    repo/jersey-grizzly2-1.9.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+  - jersey-json (https://jersey.java.net/jersey-json/)
+    repo/jersey-json-1.13.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+  - jersey-server (https://jersey.java.net/jersey-server/)
+    repo/jersey-server-1.9.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+  - jersey-guice (https://jersey.java.net/jersey-contribs/jersey-guice/)
+    repo/jersey-guice-1.9.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+  - Jersey Test FrameworkCore (https://jersey.java.net/jersey-test-framework/jersey-test-framework-core/)
+    repo/jersey-test-framework-1.9.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+  - Jersey Test FrameworkGrizzly 2 Module (https://jersey.java.net/jersey-test-framework/jersey-test-framework-grizzly2/)
+    repo/jersey-test-framework-grizzly2-1.9.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+   Are available under the CDDL 1.1:
+   --
+
+      COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL)Version 1.1
+
+      1. Definitions.
+
+      1.1. “Contributor” means each individual or entity that creates or contributes to the creation of Modifications.
+      1.2. “Contributor Version” means the combination of the Original Software, prior Modifications used by a Contributor (if any), and the Modifications made by that particular Contributor.
+      1.3. “Covered Software” means (a) the Original Software, or (b) Modifications, or (c) the combination of files containing Original Software with files containing Modifications, in each case including portions thereof.
+      1.4. “Executable” means the Covered Software in any form other than Source Code.
+      1.5. “Initial Developer” means the individual or entity that first makes Original Software available under this License.
+      1.6. “Larger Work” means a work which combines Covered Software or portions thereof with code not governed by the terms of this License.
+      1.7. “License” means this document.
+      1.8. “Licensable” means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein.
+      1.9. “Modifications” means the Source Code and Executable form of any of the following:
+      A. Any file that results from an addition to, deletion from or modification of the contents of a file containing Original Software or previous Modifications;
+      B. Any new file that contains any part of the Original Software or previous Modification; or
+      C. Any new file that is contributed or otherwise made available under the terms of this License.
+      1.10. “Original Software” means the Source Code and Executable form of computer software code that is originally released under this License.
+      1.11. “Patent Claims” means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor.
+      1.12. “Source Code” means (a) the common form of computer software code in which modifications are made and (b) associated documentation included in or with such code.
+      1.13. “You” (or “Your”) means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, “You” includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, “control” means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity.
+      2. License Grants.
+
+      2.1. The Initial Developer Grant.
+      Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, the Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license:
+      (a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer, to use, reproduce, modify, display, perform, sublicense and distribute the Original Software (or portions thereof), with or without Modifications, and/or as part of a Larger Work; and
+      (b) under Patent Claims infringed by the making, using or selling of Original Software, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Software (or portions thereof).
+      (c) The licenses granted in Sections 2.1(a) and (b) are effective on the date Initial Developer first distributes or otherwise makes the Original Software available to a third party under the terms of this License.
+      (d) Notwithstanding Section 2.1(b) above, no patent license is granted: (1) for code that You delete from the Original Software, or (2) for infringements caused by: (i) the modification of the Original Software, or (ii) the combination of the Original Software with other software or devices.
+      2.2. Contributor Grant.
+      Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license:
+      (a) under intellectual property rights (other than patent or trademark) Licensable by Contributor to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof), either on an unmodified basis, with other Modifications, as Covered Software and/or as part of a Larger Work; and
+      (b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: (1) Modifications made by that Contributor (or portions thereof); and (2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination).
+      (c) The licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first distributes or otherwise makes the Modifications available to a third party.
+      (d) Notwithstanding Section 2.2(b) above, no patent license is granted: (1) for any code that Contributor has deleted from the Contributor Version; (2) for infringements caused by: (i) third party modifications of Contributor Version, or (ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or (3) under Patent Claims infringed by Covered Software in the absence of Modifications made by that Contributor.
+      3. Distribution Obligations.
+
+      3.1. Availability of Source Code.
+      Any Covered Software that You distribute or otherwise make available in Executable form must also be made available in Source Code form and that Source Code form must be distributed only under the terms of this License. You must include a copy of this License with every copy of the Source Code form of the Covered Software You distribute or otherwise make available. You must inform recipients of any such Covered Software in Executable form as to how they can obtain such Covered Software in Source Code form in a reasonable manner on or through a medium customarily used for software exchange.
+      3.2. Modifications.
+      The Modifications that You create or to which You contribute are governed by the terms of this License. You represent that You believe Your Modifications are Your original creation(s) and/or You have sufficient rights to grant the rights conveyed by this License.
+      3.3. Required Notices.
+      You must include a notice in each of Your Modifications that identifies You as the Contributor of the Modification. You may not remove or alter any copyright, patent or trademark notices contained within the Covered Software, or any notices of licensing or any descriptive text giving attribution to any Contributor or the Initial Developer.
+      3.4. Application of Additional Terms.
+      You may not offer or impose any terms on any Covered Software in Source Code form that alters or restricts the applicable version of this License or the recipients' rights hereunder. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, you may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear that any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer.
+      3.5. Distribution of Executable Versions.
+      You may distribute the Executable form of the Covered Software under the terms of this License or under the terms of a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable form does not attempt to limit or alter the recipient's rights in the Source Code form from the rights set forth in this License. If You distribute the Covered Software in Executable form under a different license, You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer.
+      3.6. Larger Works.
+      You may create a Larger Work by combining Covered Software with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Software.
+      4. Versions of the License.
+
+      4.1. New Versions.
+      Oracle is the initial license steward and may publish revised and/or new versions of this License from time to time. Each version will be given a distinguishing version number. Except as provided in Section 4.3, no one other than the license steward has the right to modify this License.
+      4.2. Effect of New Versions.
+      You may always continue to use, distribute or otherwise make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. If the Initial Developer includes a notice in the Original Software prohibiting it from being distributed or otherwise made available under any subsequent version of the License, You must distribute and make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. Otherwise, You may also choose to use, distribute or otherwise make the Covered Software available under the terms of any subsequent version of the License published by the license steward.
+      4.3. Modified Versions.
+      When You are an Initial Developer and You want to create a new license for Your Original Software, You may create and use a modified version of this License if You: (a) rename the license and remove any references to the name of the license steward (except to note that the license differs from this License); and (b) otherwise make it clear that the license contains terms which differ from this License.
+      5. DISCLAIMER OF WARRANTY.
+
+      COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN “AS IS” BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+      6. TERMINATION.
+
+      6.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive.
+      6.2. If You assert a patent infringement claim (excluding declaratory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You assert such claim is referred to as “Participant”) alleging that the Participant Software (meaning the Contributor Version where the Participant is a Contributor or the Original Software where the Participant is the Initial Developer) directly or indirectly infringes any patent, then any and all rights granted directly or indirectly to You by such Participant, the Initial Developer (if the Initial Developer is not the Participant) and all Contributors under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively and automatically at the expiration of such 60 day notice period, unless if within such 60 day period You withdraw Your claim with respect to the Participant Software against such Participant either unilaterally or pursuant to a written agreement with Participant.
+      6.3. If You assert a patent infringement claim against Participant alleging that the Participant Software directly or indirectly infringes any patent where such claim is resolved (such as by license or settlement) prior to the initiation of patent infringement litigation, then the reasonable value of the licenses granted by such Participant under Sections 2.1 or 2.2 shall be taken into account in determining the amount or value of any payment or license.
+      6.4. In the event of termination under Sections 6.1 or 6.2 above, all end user licenses that have been validly granted by You or any distributor hereunder prior to termination (excluding licenses granted to You by any distributor) shall survive termination.
+      7. LIMITATION OF LIABILITY.
+
+      UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+      8. U.S. GOVERNMENT END USERS.
+
+      The Covered Software is a “commercial item,” as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of “commercial computer software” (as that term is defined at 48 C.F.R. § 252.227-7014(a)(1)) and “commercial computer software documentation” as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Software with only those rights set forth herein. This U.S. Government Rights clause is in lieu of, and supersedes, any other FAR, DFAR, or other clause or provision that addresses Government rights in computer software under this License.
+
+      9. MISCELLANEOUS.
+
+      This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by the law of the jurisdiction specified in a notice contained within the Original Software (except to the extent applicable law, if any, provides otherwise), excluding such jurisdiction's conflict-of-law provisions. Any litigation relating to this License shall be subject to the jurisdiction of the courts located in the jurisdiction and venue specified in a notice contained within the Original Software, with the losing party responsible for costs, including, without limitation, court costs and reasonable attorneys' fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. You agree that You alone are responsible for compliance with the United States export administration regulations (and the export control laws and regulation of any other countries) when You use, distribute or otherwise make available any Covered Software.
+
+      10. RESPONSIBILITY FOR CLAIMS.
+
+      As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability.
+
+      NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL)
+
+      The code released under the CDDL shall be governed by the laws of the State of California (excluding conflict-of-law provisions). Any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California and the state courts of the State of California, with venue lying in Santa Clara County, California.
+   --
+
+
+   ===
+
+   Component(s):
+
+   - JUnit (http://junit.org)
+     repo/junit-4.11.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+   Are available under the CPL 1.0:
+
+   --
+
+      Common Public License Version 1.0
+      THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON PUBLIC
+      LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM
+      CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+      1. DEFINITIONS
+
+      "Contribution" means:
+
+      a) in the case of the initial Contributor, the initial code and
+      documentation distributed under this Agreement, and
+
+      b) in the case of each subsequent Contributor:
+
+      i) changes to the Program, and
+
+      ii) additions to the Program;
+
+      where such changes and/or additions to the Program originate from and are
+      distributed by that particular Contributor. A Contribution 'originates' from a
+      Contributor if it was added to the Program by such Contributor itself or anyone
+      acting on such Contributor's behalf. Contributions do not include additions to
+      the Program which: (i) are separate modules of software distributed in
+      conjunction with the Program under their own license agreement, and (ii) are not
+      derivative works of the Program.
+
+      "Contributor" means any person or entity that distributes the Program.
+
+      "Licensed Patents " mean patent claims licensable by a Contributor which are
+      necessarily infringed by the use or sale of its Contribution alone or when
+      combined with the Program.
+
+      "Program" means the Contributions distributed in accordance with this Agreement.
+
+      "Recipient" means anyone who receives the Program under this Agreement,
+      including all Contributors.
+
+      2. GRANT OF RIGHTS
+
+      a) Subject to the terms of this Agreement, each Contributor hereby grants
+      Recipient a non-exclusive, worldwide, royalty-free copyright license to
+      reproduce, prepare derivative works of, publicly display, publicly perform,
+      distribute and sublicense the Contribution of such Contributor, if any, and such
+      derivative works, in source code and object code form.
+
+      b) Subject to the terms of this Agreement, each Contributor hereby grants
+      Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed
+      Patents to make, use, sell, offer to sell, import and otherwise transfer the
+      Contribution of such Contributor, if any, in source code and object code form.
+      This patent license shall apply to the combination of the Contribution and the
+      Program if, at the time the Contribution is added by the Contributor, such
+      addition of the Contribution causes such combination to be covered by the
+      Licensed Patents. The patent license shall not apply to any other combinations
+      which include the Contribution. No hardware per se is licensed hereunder.
+
+      c) Recipient understands that although each Contributor grants the licenses
+      to its Contributions set forth herein, no assurances are provided by any
+      Contributor that the Program does not infringe the patent or other intellectual
+      property rights of any other entity. Each Contributor disclaims any liability to
+      Recipient for claims brought by any other entity based on infringement of
+      intellectual property rights or otherwise. As a condition to exercising the
+      rights and licenses granted hereunder, each Recipient hereby assumes sole
+      responsibility to secure any other intellectual property rights needed, if any.
+      For example, if a third party patent license is required to allow Recipient to
+      distribute the Program, it is Recipient's responsibility to acquire that license
+      before distributing the Program.
+
+      d) Each Contributor represents that to its knowledge it has sufficient
+      copyright rights in its Contribution, if any, to grant the copyright license set
+      forth in this Agreement.
+
+      3. REQUIREMENTS
+
+      A Contributor may choose to distribute the Program in object code form under its
+      own license agreement, provided that:
+
+      a) it complies with the terms and conditions of this Agreement; and
+
+      b) its license agreement:
+
+      i) effectively disclaims on behalf of all Contributors all warranties and
+      conditions, express and implied, including warranties or conditions of title and
+      non-infringement, and implied warranties or conditions of merchantability and
+      fitness for a particular purpose;
+
+      ii) effectively excludes on behalf of all Contributors all liability for
+      damages, including direct, indirect, special, incidental and consequential
+      damages, such as lost profits;
+
+      iii) states that any provisions which differ from this Agreement are offered
+      by that Contributor alone and not by any other party; and
+
+      iv) states that source code for the Program is available from such
+      Contributor, and informs licensees how to obtain it in a reasonable manner on or
+      through a medium customarily used for software exchange.
+
+      When the Program is made available in source code form:
+
+      a) it must be made available under this Agreement; and
+
+      b) a copy of this Agreement must be included with each copy of the Program.
+
+      Contributors may not remove or alter any copyright notices contained within the
+      Program.
+
+      Each Contributor must identify itself as the originator of its Contribution, if
+      any, in a manner that reasonably allows subsequent Recipients to identify the
+      originator of the Contribution.
+
+      4. COMMERCIAL DISTRIBUTION
+
+      Commercial distributors of software may accept certain responsibilities with
+      respect to end users, business partners and the like. While this license is
+      intended to facilitate the commercial use of the Program, the Contributor who
+      includes the Program in a commercial product offering should do so in a manner
+      which does not create potential liability for other Contributors. Therefore, if
+      a Contributor includes the Program in a commercial product offering, such
+      Contributor ("Commercial Contributor") hereby agrees to defend and indemnify
+      every other Contributor ("Indemnified Contributor") against any losses, damages
+      and costs (collectively "Losses") arising from claims, lawsuits and other legal
+      actions brought by a third party against the Indemnified Contributor to the
+      extent caused by the acts or omissions of such Commercial Contributor in
+      connection with its distribution of the Program in a commercial product
+      offering. The obligations in this section do not apply to any claims or Losses
+      relating to any actual or alleged intellectual property infringement. In order
+      to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+      Contributor in writing of such claim, and b) allow the Commercial Contributor to
+      control, and cooperate with the Commercial Contributor in, the defense and any
+      related settlement negotiations. The Indemnified Contributor may participate in
+      any such claim at its own expense.
+
+      For example, a Contributor might include the Program in a commercial product
+      offering, Product X. That Contributor is then a Commercial Contributor. If that
+      Commercial Contributor then makes performance claims, or offers warranties
+      related to Product X, those performance claims and warranties are such
+      Commercial Contributor's responsibility alone. Under this section, the
+      Commercial Contributor would have to defend claims against the other
+      Contributors related to those performance claims and warranties, and if a court
+      requires any other Contributor to pay any damages as a result, the Commercial
+      Contributor must pay those damages.
+
+      5. NO WARRANTY
+
+      EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED 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. Each
+      Recipient is solely responsible for determining the appropriateness of using and
+      distributing the Program and assumes all risks associated with its exercise of
+      rights under this Agreement, including but not limited to the risks and costs of
+      program errors, compliance with applicable laws, damage to or loss of data,
+      programs or equipment, and unavailability or interruption of operations.
+
+      6. DISCLAIMER OF LIABILITY
+
+      EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY
+      CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+      SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST
+      PROFITS), 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 OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS
+      GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+      7. GENERAL
+
+      If any provision of this Agreement is invalid or unenforceable under applicable
+      law, it shall not affect the validity or enforceability of the remainder of the
+      terms of this Agreement, and without further action by the parties hereto, such
+      provision shall be reformed to the minimum extent necessary to make such
+      provision valid and enforceable.
+
+      If Recipient institutes patent litigation against a Contributor with respect to
+      a patent applicable to software (including a cross-claim or counterclaim in a
+      lawsuit), then any patent licenses granted by that Contributor to such Recipient
+      under this Agreement shall terminate as of the date such litigation is filed. In
+      addition, if Recipient institutes patent litigation against any entity
+      (including a cross-claim or counterclaim in a lawsuit) alleging that the Program
+      itself (excluding combinations of the Program with other software or hardware)
+      infringes such Recipient's patent(s), then such Recipient's rights granted under
+      Section 2(b) shall terminate as of the date such litigation is filed.
+
+      All Recipient's rights under this Agreement shall terminate if it fails to
+      comply with any of the material terms or conditions of this Agreement and does
+      not cure such failure in a reasonable period of time after becoming aware of
+      such noncompliance. If all Recipient's rights under this Agreement terminate,
+      Recipient agrees to cease use and distribution of the Program as soon as
+      reasonably practicable. However, Recipient's obligations under this Agreement
+      and any licenses granted by Recipient relating to the Program shall continue and
+      survive.
+
+      Everyone is permitted to copy and distribute copies of this Agreement, but in
+      order to avoid inconsistency the Agreement is copyrighted and may only be
+      modified in the following manner. The Agreement Steward reserves the right to
+      publish new versions (including revisions) of this Agreement from time to time.
+      No one other than the Agreement Steward has the right to modify this Agreement.
+      IBM is the initial Agreement Steward. IBM may assign the responsibility to serve
+      as the Agreement Steward to a suitable separate entity. Each new version of the
+      Agreement will be given a distinguishing version number. The Program (including
+      Contributions) may always be distributed subject to the version of the Agreement
+      under which it was received. In addition, after a new version of the Agreement
+      is published, Contributor may elect to distribute the Program (including its
+      Contributions) under the new version. Except as expressly stated in Sections
+      2(a) and 2(b) above, Recipient receives no rights or licenses to the
+      intellectual property of any Contributor under this Agreement, whether
+      expressly, by implication, estoppel or otherwise. All rights in the Program not
+      expressly granted under this Agreement are reserved.
+
+      This Agreement is governed by the laws of the State of New York and the
+      intellectual property laws of the United States of America. No party to this
+      Agreement will bring a legal action under this Agreement more than one year
+      after the cause of action arose. Each party waives its rights to a jury trial in
+      any resulting litigation.
+      --
+
+      ===
+      Component(s)
+
+      - SLF4J JCL Binding (http://www.slf4j.org) 
+        repo/slf4j-jcl-1.6.3.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+      - SLF4J LOG4J-12 Binding (http://www.slf4j.org)
+        repo/slf4j-log4j12-1.7.5.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+      - SLF4J API Module (http://www.slf4j.org/slf4j-api)
+        repo/slf4j-api-1.6.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+      are provided under the MIT license:
+
+      --
+      Copyright (c) 2004-2013 QOS.ch
+       All rights reserved.
+
+       Permission is hereby granted, free  of charge, to any person obtaining
+       a  copy  of this  software  and  associated  documentation files  (the
+       "Software"), to  deal in  the Software without  restriction, including
+       without limitation  the rights to  use, copy, modify,  merge, publish,
+       distribute,  sublicense, and/or sell  copies of  the Software,  and to
+       permit persons to whom the Software  is furnished to do so, subject to
+       the following conditions:
+       
+       The  above  copyright  notice  and  this permission  notice  shall  be
+       included in all copies or substantial portions of the Software.
+       
+       THE  SOFTWARE IS  PROVIDED  "AS  IS", WITHOUT  WARRANTY  OF ANY  KIND,
+       EXPRESS OR  IMPLIED, INCLUDING  BUT NOT LIMITED  TO THE  WARRANTIES OF
+       MERCHANTABILITY,    FITNESS    FOR    A   PARTICULAR    PURPOSE    AND
+       NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+       LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+       OF CONTRACT, TORT OR OTHERWISE,  ARISING FROM, OUT OF OR IN CONNECTION
+       WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+   --
+
+   ===
+   Component(s):
+   - antlr-runtime (http://www.antlr.org/antlr-runtime)
+     repo/antlr-runtime-3.4.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+   - ANTLR ST4 4.0.4 (http://www.stringtemplate.org)
+     repo/ST4-4.0.4.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+   - ANTLR StringTemplate (http://www.stringtemplate.org)
+     repo/stringtemplate-3.2.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+   - AntLR Parser Generator (http://www.antlr.org/)
+     repo/antlr-2.7.7.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+   Are available under a  BSD-style License:
+
+   --
+      Copyright (c) 2012 Terence Parr and Sam Harwell
+      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 the author 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.
+   --
+
+   ===
+   Component(s):
+   - JSch (http://www.jcraft.com/jsch/) 
+     repo/jsch-0.1.42.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+   are available under a BSD-style license:
+
+   --
+      JSch 0.0.* was released under the GNU LGPL license.  Later, we have switched 
+      over to a BSD-style license. 
+
+      ------------------------------------------------------------------------------
+      Copyright (c) 2002-2015 Atsuhiko Yamanaka, JCraft,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:
+
+        1. Redistributions of source code must retain the above copyright notice,
+           this list of conditions and the following disclaimer.
+
+        2. 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.
+
+        3. The names of the authors may not be used to endorse or promote products
+           derived from this software without specific prior written permission.
+
+      THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 JCRAFT,
+      INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE 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.
+   --
+
+   ===
+   Component(s):
+   - StAX Utilities (http://stax-utils.dev.java.net/stax-utils)
+     net.java.dev.stax-utils:stax-utils:jar:20060502:compile
+
+   are available under a BSD-style license::
+
+   --
+      Copyright (c) 2004, Christian Niles, unit12.net
+      Copyright (c) 2004, Sun Microsystems, Inc.
+      Copyright (c) 2006, John Kristian 
+      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 the listed copyright holders 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.
+   --
+
+   ===
+   Component(s):
+   - ParaNamer Core (http://paranamer.codehaus.org/paranamer) 
+     repo/paranamer-2.3.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+   are available under a BSD-style license:
+
+   --
+      [ ParaNamer used to be 'Pubic Domain', but since it includes a small piece of ASM it is now the same license as that: BSD ]
+
+       Copyright (c) 2006 Paul Hammant & ThoughtWorks 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:
+       1. Redistributions of source code must retain the above copyright
+          notice, this list of conditions and the following disclaimer.
+       2. 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.
+       3. Neither the name of the copyright holders 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
+   --
+
+   ===
+   Component(s):
+   - JDOM
+     repo/jdom-1.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+   are available under a Modified ASL license:
+   --
+      /*-- 
+
+       $Id: LICENSE.txt,v 1.11 2004/02/06 09:32:57 jhunter Exp $
+
+       Copyright (C) 2000-2004 Jason Hunter & Brett McLaughlin.
+       All rights reserved.
+       
+       Redistribution and use in source and binary forms, with or without
+       modification, are permitted provided that the following conditions
+       are met:
+       
+       1. Redistributions of source code must retain the above copyright
+          notice, this list of conditions, and the following disclaimer.
+       
+       2. Redistributions in binary form must reproduce the above copyright
+          notice, this list of conditions, and the disclaimer that follows 
+          these conditions in the documentation and/or other materials 
+          provided with the distribution.
+
+       3. The name "JDOM" must not be used to endorse or promote products
+          derived from this software without prior written permission.  For
+          written permission, please contact <request_AT_jdom_DOT_org>.
+       
+       4. Products derived from this software may not be called "JDOM", nor
+          may "JDOM" appear in their name, without prior written permission
+          from the JDOM Project Management <request_AT_jdom_DOT_org>.
+       
+       In addition, we request (but do not require) that you include in the 
+       end-user documentation provided with the redistribution and/or in the 
+       software itself an acknowledgement equivalent to the following:
+           "This product includes software developed by the
+            JDOM Project (http://www.jdom.org/)."
+       Alternatively, the acknowledgment may be graphical using the logos 
+       available at http://www.jdom.org/images/logos.
+
+       THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 JDOM AUTHORS OR THE PROJECT
+       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.
+
+       This software consists of voluntary contributions made by many 
+       individuals on behalf of the JDOM Project and was originally 
+       created by Jason Hunter <jhunter_AT_jdom_DOT_org> and
+       Brett McLaughlin <brett_AT_jdom_DOT_org>.  For more information
+       on the JDOM Project, please see <http://www.jdom.org/>. 
+
+    */
+   --
+
+   ===
+   Component(s):
+   - Hamcrest Core (https://github.com/hamcrest/JavaHamcrest/hamcrest-core) 
+     repo/hamcrest-core-1.3.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+   are available under a BSD-style license
+   --
+      BSD License
+
+      Copyright (c) 2000-2006, www.hamcrest.org
+      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 Hamcrest 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.
+   --
+
+   ===
+   Component(s):
+   - Protocol Buffer Java API (http://code.google.com/p/protobuf) 
+     repo/prtobuf-java-2.5.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+   are available under a BSD-style license:
+
+   --
+      This license applies to all parts of Protocol Buffers except the following:
+
+        - Atomicops support for generic gcc, located in
+          src/google/protobuf/stubs/atomicops_internals_generic_gcc.h.
+          This file is copyrighted by Red Hat Inc.
+
+        - Atomicops support for AIX/POWER, located in
+          src/google/protobuf/stubs/atomicops_internals_power.h.
+          This file is copyrighted by Bloomberg Finance LP.
+
+      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.
+   --
+
+   ===
+   Component(s):
+   - JSON (JavaScript Object Notation) (http://www.json.org/java/index.html) 
+     repo/json-20090211.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+   are available under the JSON license:
+
+   --
+      Copyright (c) 2002 JSON.org
+
+      Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+      The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+      The Software shall be used for Good, not Evil.
+
+      THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+   --
+
+   ===
+   Component(s):
+   - XZ for Java (http://tukaani.org/xz/java.html) 
+     repo/xz-1.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+   - XML Pull Parsing API (http://aopalliance.sourceforge.net/aopalliance) 
+     repo/aopalliance-1.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+   are in the public domain.
+
+   ===
+
+   Component(s):
+   - JLine (http://jline.sourceforge.net) 
+     repo/jline-0.9.94.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+   are available under a BSD-style license:
+   --
+
+      Copyright (c) 2002-2006, Marc Prud'hommeaux <mwp1@cornell.edu>
+      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 JLine 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.
+   --
+
+   ===
+   Component(s):
+
+   - xmlenc Library (http://xmlenc.sourceforge.net) 
+     repo/xmlenc-0.52.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+   are available under a BSD-style license:
+
+   --
+      Copyright 2003-2005, Ernst de Haan <wfe.dehaan@gmail.com>
+      All rights reserved.
+
+      Redistribution and use in source and binary forms, with or without
+      modification, are permitted provided that the following conditions are met:
+
+      1. Redistributions of source code must retain the above copyright notice, this
+         list of conditions and the following disclaimer.
+
+      2. 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.
+
+      3. Neither the name of the copyright holder 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 HOLDER 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.
+   --
+
+   ===
+   Component(s):
+   - Appassembler :: Generic Bootstrapper (http://mojo.codehaus.org/appassembler/appassembler-booter) 
+     repo/appassembler-booter-1.3.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+   - Appassembler :: Model (http://mojo.codehaus.org/appassembler/appassembler-model) 
+     repo/appassembler-model-1.3.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+   are available under the MIT license:
+
+   --
+      The MIT License
+
+      Copyright 2006-2012 The Codehaus.
+
+      Permission is hereby granted, free of charge, to any person obtaining a copy of
+      this software and associated documentation files \(the "Software"\), to deal in
+      the Software without restriction, including without limitation the rights to
+      use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+      of the Software, and to permit persons to whom the Software is furnished to do
+      so, subject to the following conditions:
+
+      The above copyright notice and this permission notice shall be included in all
+      copies or substantial portions of the Software.
+
+      THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+      IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+      FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+      AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+      LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+      OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+      SOFTWARE.
+   --
+
+   ===
+   Component(s):
+
+   - args4j (http://args4j.dev.java.net/args4j/) 
+     repo/args4j-2.0.12.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+   are available under the MIT License:
+
+   --
+      Copyright (c) 2003, Kohsuke Kawaguchi
+
+      Permission is hereby granted, free of charge, to any person
+      obtaining a copy of this software and associated documentation
+      files (the "Software"), to deal in the Software without
+      restriction, including without limitation the rights to use,
+      copy, modify, merge, publish, distribute, sublicense, and/or sell
+      copies of the Software, and to permit persons to whom the
+      Software is furnished to do so, subject to the following
+      conditions:
+
+      The above copyright notice and this permission notice shall be
+      included in all copies or substantial portions of the Software.
+
+      THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+      EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+      OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+      NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+      HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+      WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+      FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+      OTHER DEALINGS IN THE SOFTWARE.
+   --
+
+   ===
+   Component(s)
+   - ASM Core (http://asm.objectweb.org/asm/) 
+     repo/asm-3.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+   are available under a BSD-style license:
+
+   --
+      Copyright (c) 2000-2011 INRIA, France Telecom
+      All rights reserved.
+
+      Redistribution and use in source and binary forms, with or without
+      modification, are permitted provided that the following conditions
+      are met:
+
+      1. Redistributions of source code must retain the above copyright
+         notice, this list of conditions and the following disclaimer.
+
+      2. 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.
+
+      3. Neither the name of the copyright holders 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.
+   --
+
+
+   ===
+   Component(s)
+   - Plexus Utils (http://asm.objectweb.org/asm/) 
+     repo/plexus-utils-3.0.7.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    contain components under a BSD-style license:
+
+   --
+    /********************************************************************************
+     * CruiseControl, a Continuous Integration Toolkit
+     * Copyright (c) 2001-2003, ThoughtWorks, Inc.
+     * 651 W Washington Ave. Suite 500
+     * Chicago, IL 60661 USA
+     * 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 ThoughtWorks, Inc., CruiseControl, 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 REGENTS 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.
+     ********************************************************************************/
+   --
+
+   ===
+   Component(s)
+   - Plexus Utils (http://asm.objectweb.org/asm/) 
+     repo/plexus-utils-3.0.7.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    contain components under a BSD-style license:
+
+   --
+    Javolution - Java(TM) Solution for Real-Time and Embedded Systems
+    Copyright (c) 2006, Javolution (http://javolution.org)
+    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.
+
+    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.
+   --
+
+   ===
+   Component(s)
+   - Plexus Utils (http://asm.objectweb.org/asm/) 
+     repo/plexus-utils-3.0.7.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    contain components under the Indiana University Extreme! Lab Software License:
+
+   --
+    Indiana University Extreme! Lab Software License
+
+    Version 1.1.1
+
+    Copyright (c) 2002 Extreme! Lab, Indiana University. All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without 
+    modification, are permitted provided that the following conditions 
+    are met:
+
+    1. Redistributions of source code must retain the above copyright notice, 
+       this list of conditions and the following disclaimer.
+
+    2. 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.
+
+    3. The end-user documentation included with the redistribution, if any, 
+       must include the following acknowledgment:
+
+      "This product includes software developed by the Indiana University 
+      Extreme! Lab (http://www.extreme.indiana.edu/)."
+
+    Alternately, this acknowledgment may appear in the software itself, 
+    if and wherever such third-party acknowledgments normally appear.
+
+    4. The names "Indiana Univeristy" and "Indiana Univeristy Extreme! Lab" 
+    must not be used to endorse or promote products derived from this 
+    software without prior written permission. For written permission, 
+    please contact http://www.extreme.indiana.edu/.
+
+    5. Products derived from this software may not use "Indiana Univeristy" 
+    name nor may "Indiana Univeristy" appear in their name, without prior 
+    written permission of the Indiana University.
+
+    THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED 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 AUTHORS, COPYRIGHT HOLDERS OR ITS 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.
+   --
+===
+
+
+For portions of the AsterixDB WebUI in:
+repo/asterix-app-0.8.8.jar, within
+asterix/asterix-server-0.8.8-binary-assembly.zip, within this assembly
+located at:
+
+ webui/static/js/jquery.min.js
+and
+ webui/static/js/jquery.autosize-min.js
+
+are available under a MIT-style license
+--
+
+   Copyright jQuery Foundation and other contributors, https://jquery.org/
+
+   This software consists of voluntary contributions made by many
+   individuals. For exact contribution history, see the revision history
+   available at https://github.com/jquery/jquery
+
+   The following license applies to all parts of this software except as
+   documented below:
+
+   ====
+
+   Permission is hereby granted, free of charge, to any person obtaining
+   a copy of this software and associated documentation files (the
+   "Software"), to deal in the Software without restriction, including
+   without limitation the rights to use, copy, modify, merge, publish,
+   distribute, sublicense, and/or sell copies of the Software, and to
+   permit persons to whom the Software is furnished to do so, subject to
+   the following conditions:
+
+   The above copyright notice and this permission notice shall be
+   included in all copies or substantial portions of the Software.
+
+   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+   LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+   OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+   WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+   ====
+
+   All files located in the node_modules and external directories are
+   externally maintained libraries used by this software which have their
+   own licenses; we recommend you read them, as their terms may differ from
+   the terms above.
+
+as well as portions of the WebUI at:
+webui/static/js/bootstrap.min.js
+
+   The MIT License (MIT)
+
+   Copyright (c) 2011-2015 Twitter, Inc
+
+   Permission is hereby granted, free of charge, to any person obtaining a copy
+   of this software and associated documentation files (the "Software"), to deal
+   in the Software without restriction, including without limitation the rights
+   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+   copies of the Software, and to permit persons to whom the Software is
+   furnished to do so, subject to the following conditions:
+
+   The above copyright notice and this permission notice shall be included in
+   all copies or substantial portions of the Software.
+
+   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+   AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+   LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+   OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+   THE SOFTWARE.
+
+
+and portions of the WebUI at:
+webui/static/js/smoothie.js
+
+   MIT License
+   -----------
+
+   Copyright (c) 2010-2013, Joe Walnes
+                 2013-2014, Drew Noakes
+
+                 Permission is hereby granted, free of charge, to any person obtaining a copy
+                 of this software and associated documentation files (the "Software"), to deal
+                 in the Software without restriction, including without limitation the rights
+                 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+                 copies of the Software, and to permit persons to whom the Software is
+                 furnished to do so, subject to the following conditions:
+
+                 The above copyright notice and this permission notice shall be included in
+                 all copies or substantial portions of the Software.
+
+                 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+                 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+                 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+                 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+                 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+                 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+                 THE SOFTWARE.
diff --git a/hyracks/hyracks-examples/text-example/textserver/src/main/licenses/NOTICE b/hyracks/hyracks-examples/text-example/textserver/src/main/licenses/NOTICE
new file mode 100644
index 0000000..2612883
--- /dev/null
+++ b/hyracks/hyracks-examples/text-example/textserver/src/main/licenses/NOTICE
@@ -0,0 +1,403 @@
+Apache AsterixDB
+Copyright 2016 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+AsterixDB utilizes many libraries, which come with the following applicable NOTICE(s):
+
+ - repo/algebricks-common-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    algebricks-common
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/algebricks-compiler-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    algebricks-compiler
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/algebricks-core-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    algebricks-core
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/algebricks-data-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    algebricks-data
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/algebricks-rewriter-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    algebricks-rewriter
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/algebricks-runtime-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    algebricks-runtime
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/asterix-algebra-0.8.8-SNAPSHOT.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    asterix-algebra
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/asterix-app-0.8.8-SNAPSHOT.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    asterix-app
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/asterix-aql-0.8.8-SNAPSHOT.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    asterix-aql
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/asterix-common-0.8.8-SNAPSHOT.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    asterix-common
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/asterix-events-0.8.8-SNAPSHOT.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    asterix-events
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/asterix-external-data-0.8.8-SNAPSHOT.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    asterix-external-data
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/asterix-fuzzyjoin-0.8.8-SNAPSHOT.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    asterix-fuzzyjoin
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/asterix-metadata-0.8.8-SNAPSHOT.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    asterix-metadata
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/asterix-om-0.8.8-SNAPSHOT.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    asterix-om
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/asterix-runtime-0.8.8-SNAPSHOT.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    asterix-runtime
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/asterix-server-0.8.8-SNAPSHOT.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    asterix-server
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/asterix-tools-0.8.8-SNAPSHOT.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    asterix-tools
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/asterix-transactions-0.8.8-SNAPSHOT.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    asterix-transactions
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/avro-1.7.4.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    Apache Avro
+    Copyright 2009-2013 The Apache Software Foundation
+
+ - repo/commons-logging-1.1.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    Commons Logging
+    Copyright 2001-2007 The Apache Software Foundation
+
+ - repo/derby-10.10.1.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    Apache Derby
+    Copyright 2004-2013 The Apache Software Foundation
+
+    =========================================================================
+
+        Portions of Derby were originally developed by
+        International Business Machines Corporation and are
+    licensed to the Apache Software Foundation under the
+    "Software Grant and Corporate Contribution License Agreement",
+    informally known as the "Derby CLA".
+    The following copyright notice(s) were affixed to portions of the code
+    with which this file is now or was at one time distributed
+    and are placed here unaltered.
+
+    (C) Copyright 1997,2004 International Business Machines Corporation.  All rights reserved.
+
+    (C) Copyright IBM Corp. 2003. 
+
+
+    =========================================================================
+
+
+    The JDBC apis for small devices and JDBC3 (under java/stubs/jsr169 and
+    java/stubs/jdbc3) were produced by trimming sources supplied by the
+    Apache Harmony project. In addition, the Harmony SerialBlob and
+    SerialClob implementations are used. The following notice covers the Harmony sources:
+
+    Portions of Harmony were originally developed by
+    Intel Corporation and are licensed to the Apache Software
+    Foundation under the "Software Grant and Corporate Contribution
+    License Agreement", informally known as the "Intel Harmony CLA".
+
+
+ - repo/guice-3.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    Google Guice - Core Library
+    Copyright 2006-2011 Google, Inc.
+
+ - repo/guice-servlet-3.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    Google Guice - Extensions - Servlet
+    Copyright 2006-2011 Google, Inc.
+
+ - repo/hive-ant-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    Hive Ant Utilities
+    Copyright 2014 The Apache Software Foundation
+
+ - repo/hive-common-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    Hive Common
+    Copyright 2014 The Apache Software Foundation
+
+ - repo/hive-exec-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    Hive Query Language
+    Copyright 2014 The Apache Software Foundation
+
+ - repo/hive-metastore-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    Hive Metastore
+    Copyright 2014 The Apache Software Foundation
+
+ - repo/hive-serde-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    Hive Serde
+    Copyright 2014 The Apache Software Foundation
+
+ - repo/hive-shims-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    Hive Shims
+    Copyright 2014 The Apache Software Foundation
+
+ - repo/hive-shims-0.20-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    Hive Shims 0.20
+    Copyright 2014 The Apache Software Foundation
+
+ - repo/hive-shims-0.20S-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    Hive Shims 0.20S
+    Copyright 2014 The Apache Software Foundation
+
+ - repo/hive-shims-0.23-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    Hive Shims 0.23
+    Copyright 2014 The Apache Software Foundation
+
+ - repo/hive-shims-common-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    Hive Shims Common
+    Copyright 2014 The Apache Software Foundation
+
+ - repo/hive-shims-common-secure-0.13.0.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    Hive Shims Secure Common
+    Copyright 2014 The Apache Software Foundation
+
+ - repo/hyracks-api-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    hyracks-api
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/hyracks-client-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    hyracks-client
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/hyracks-comm-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    hyracks-comm
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/hyracks-control-cc-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    hyracks-control-cc
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/hyracks-control-common-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    hyracks-control-common
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/hyracks-control-nc-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    hyracks-control-nc
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/hyracks-dataflow-common-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    hyracks-dataflow-common
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/hyracks-dataflow-std-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    hyracks-dataflow-std
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/hyracks-data-std-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    hyracks-data-std
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/hyracks-hdfs-2.x-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    hyracks-hdfs-2.x
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/hyracks-hdfs-core-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    hyracks-hdfs-core
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/hyracks-ipc-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    hyracks-ipc
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/hyracks-net-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    hyracks-net
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/hyracks-storage-am-bloomfilter-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    hyracks-storage-am-bloomfilter
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/hyracks-storage-am-btree-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    hyracks-storage-am-btree
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/hyracks-storage-am-common-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    hyracks-storage-am-common
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/hyracks-storage-am-lsm-btree-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    hyracks-storage-am-lsm-btree
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/hyracks-storage-am-lsm-common-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    hyracks-storage-am-lsm-common
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/hyracks-storage-am-lsm-invertedindex-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    hyracks-storage-am-lsm-invertedindex
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/hyracks-storage-am-lsm-rtree-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    hyracks-storage-am-lsm-rtree
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/hyracks-storage-am-rtree-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    hyracks-storage-am-rtree
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/hyracks-storage-common-0.2.17-incubating.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    hyracks-storage-common
+    Copyright 2016 The Apache Software Foundation
+
+ - repo/plexus-utils-3.0.7.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    This product includes software developed by the Indiana University 
+    Extreme! Lab (http://www.extreme.indiana.edu/)
+
+    This product includes software developed by
+    ThoughtWorks (http://www.thoughtworks.com).
+
+    This product includes software developed by
+    javolution (http://javolution.org/).
+
+    This product includes software developed by
+    Rome (https://rome.dev.java.net/).
+
+- repo/velocity-1.5.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    Apache Velocity
+    Copyright (C) 2000-2007 The Apache Software Foundation
+
+ - repo/wicket-core-1.5.2.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+   Apache Wicket
+   Copyright 2006-2011 Apache Software Foundation
+
+   This product includes software from QOS.ch (http://slf4j.org) licensed under the X11 license
+   Copyright (c) 2004-2008 QOS.ch
+
+   Contains Diff library from Mavens JRCS, released under
+   The Apache Software License, Version 1.1.
+   (c) 1999-2003
+
+   org.apache.wicket.markup.html.form.upload.MultiFileUploadField.js is taken from [1]
+   and has the following notice:
+      "Licence:
+       Use this however/wherever you like, just don't blame me if it breaks
+       anything.
+
+       Credit:
+       If you're nice, you'll leave this bit:
+
+       Class by Stickman -- http://www.the-stickman.com
+       with thanks to:
+       [for Safari fixes]
+          Luis Torrefranca -- http://www.law.pitt.edu
+          and
+          Shawn Parker & John Pennypacker -- http://www.fuzzycoconut.com
+       [for duplicate name bug]
+          'neal'"
+   [1]: http://the-stickman.com/web-development/javascript/upload-multiple-files-with-a-single-file-element/
+ - repo/wicket-request-1.5.2.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    Wicket Request
+    Copyright 2006-2011 Apache Software Foundation
+
+ - repo/wicket-util-1.5.2.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+    Wicket Util
+    Copyright 2006-2011 Apache Software Foundation
+
+ - repo/xercesImpl-2.9.1.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+   Apache Xerces Java
+   Copyright 1999-2007 The Apache Software Foundation
+
+   Portions of this software were originally based on the following:
+     - software copyright (c) 1999, IBM Corporation., http://www.ibm.com.
+     - software copyright (c) 1999, Sun Microsystems., http://www.sun.com.
+     - voluntary contributions made by Paul Eng on behalf of the 
+       Apache Software Foundation that were originally developed at iClick, Inc.,
+       software copyright (c) 1999.
+
+ - repo/xml-apis-1.3.04.jar in asterix/asterix-server-0.8.8-binary-assembly.zip
+
+   Apache XML Commons XML APIs
+   Copyright 2006 The Apache Software Foundation.
+
+
+   Portions of this software were originally based on the following:
+     - software copyright (c) 1999, IBM Corporation., http://www.ibm.com.
+     - software copyright (c) 1999, Sun Microsystems., http://www.sun.com.
+     - software copyright (c) 2000 World Wide Web Consortium, http://www.w3.org
diff --git a/hyracks/hyracks-examples/tpch-example/tpchserver/src/main/assembly/binary-assembly.xml b/hyracks/hyracks-examples/tpch-example/tpchserver/src/main/assembly/binary-assembly.xml
index e443c5f..8305c5a 100644
--- a/hyracks/hyracks-examples/tpch-example/tpchserver/src/main/assembly/binary-assembly.xml
+++ b/hyracks/hyracks-examples/tpch-example/tpchserver/src/main/assembly/binary-assembly.xml
@@ -42,11 +42,17 @@
       <directory>target/classes/META-INF</directory>
       <outputDirectory>.</outputDirectory>
       <includes>
-        <include>LICENSE*</include>
-        <include>NOTICE*</include>
         <include>DISCLAIMER*</include>
         <include>DEPENDENCIES*</include>
       </includes>
     </fileSet>
-  </fileSets>
+      <fileSet>
+      <directory>src/main/licenses</directory>
+      <outputDirectory>.</outputDirectory>
+      <includes>
+        <include>LICENSE*</include>
+        <include>NOTICE*</include>
+      </includes>
+    </fileSet>
+ </fileSets>
 </assembly>
diff --git a/hyracks/hyracks-examples/tpch-example/tpchserver/src/main/licenses/LICENSE b/hyracks/hyracks-examples/tpch-example/tpchserver/src/main/licenses/LICENSE
new file mode 100644
index 0000000..644bea1
--- /dev/null
+++ b/hyracks/hyracks-examples/tpch-example/tpchserver/src/main/licenses/LICENSE
@@ -0,0 +1,707 @@
+
+                                 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.
+
+
+   ASTERIXDB COMPONENTS:
+
+   AsterixDB 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 condition of the following
+   licenses.
+
+   Components under Apache License 2.0 are as follows:
+
+     - HttpClient (http://hc.apache.org/httpcomponents-client)
+       lib/httpclient-4.3.jar
+     - HttpCore (http://hc.apache.org/httpcomponents-core-ga)
+       lib/httpcore-4.3.jar
+     - Jetty :: Continuation (http://www.eclipse.org/jetty/jetty-continuation)
+       lib/jetty-continuation-8.0.0.RC0.jar
+     - Jetty :: Http Utility (http://www.eclipse.org/jetty/jetty-http)
+       lib/jetty-http-8.0.0.RC0.jar
+     - Jetty :: IO Utility (http://www.eclipse.org/jetty/jetty-io)
+       lib/jetty-io-8.0.0.RC0.jar
+     - Jetty :: Security (http://www.eclipse.org/jetty/jetty-security)
+       lib/jetty-security-8.0.0.RC0.jar
+     - Jetty :: Server Core (http://www.eclipse.org/jetty)
+       lib/jetty-server-8.0.0.RC0.jar
+     - Jetty :: Servlet Handling (http://www.eclipse.org/jetty/jetty-servlet)
+       lib/jetty-servlet-8.0.0.RC0.jar
+     - Jetty :: Utilities (http://www.eclipse.org/jetty/jetty-util)
+       lib/jetty-util-8.0.0.RC0.jar
+     - Jetty :: Webapp Application Support (http://www.eclipse.org/jetty/jetty-webapp)
+       lib/jetty-webapp-8.0.0.RC0.jar
+     - Jetty :: XML utilities (http://www.eclipse.org/jetty/jetty-xml)
+       lib/jetty-xml-8.0.0.RC0.jar
+     - Servlet API (http://www.eclipse.org/jetty/jetty-parent/servlet-api)
+       lib/servlet-api-3.0.20100224.jar
+     - Wicket Core (http://wicket.apache.org/wicket-core/wicket-core)
+       lib/wicket-core-1.5.2.jar
+     - Wicket Request (http://maven.apache.org)
+       lib/wicket-request-1.5.2.jar
+     - Wicket Util (http://maven.apache.org)
+       lib/wicket-util-1.5.2.jar
+     - Apache Commons Codec (http://commons.apache.org/codec/commons-codec)
+       lib/commons-codec-1.4.jar
+     - Commons IO (http://commons.apache.org/io/)
+       lib/commons-io-2.4.jar
+     - Apache Commons Logging (http://commons.apache.org/logging)
+       lib/commons-logging-1.1.1.jar
+     - Commons Lang (http://commons.apache.org/lang/)
+       lib/commons-lang3-3.1.jar
+
+   ===
+
+   Component(s):
+   - Java Servlet API (http://servlet-spec.java.net)
+     lib/javax.servlet-3.0.20100224.jar
+
+
+   are available under the CDDL 1.0
+   --
+      COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0
+
+      1. Definitions.
+
+      1.1. “Contributor” means each individual or entity that creates or contributes to the creation of Modifications.
+
+      1.2. “Contributor Version” means the combination of the Original Software, prior Modifications used by a Contributor (if any), and the Modifications made by that particular Contributor.
+
+      1.3. “Covered Software” means (a) the Original Software, or (b) Modifications, or (c) the combination of files containing Original Software with files containing Modifications, in each case including portions thereof.
+
+      1.4. “Executable” means the Covered Software in any form other than Source Code.
+
+      1.5. “Initial Developer” means the individual or entity that first makes Original Software available under this License.
+
+      1.6. “Larger Work” means a work which combines Covered Software or portions thereof with code not governed by the terms of this License.
+
+      1.7. “License” means this document.
+
+      1.8. “Licensable” means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein.
+
+      1.9. “Modifications” means the Source Code and Executable form of any of the following:
+
+      A. Any file that results from an addition to, deletion from or modification of the contents of a file containing Original Software or previous Modifications;
+
+      B. Any new file that contains any part of the Original Software or previous Modification; or
+
+      C. Any new file that is contributed or otherwise made available under the terms of this License.
+
+      1.10. “Original Software” means the Source Code and Executable form of computer software code that is originally released under this License.
+
+      1.11. “Patent Claims” means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor.
+
+      1.12. “Source Code” means (a) the common form of computer software code in which modifications are made and (b) associated documentation included in or with such code.
+
+      1.13. “You” (or “Your”) means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, “You” includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, “control” means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity.
+
+      2. License Grants.
+
+      2.1. The Initial Developer Grant.
+
+      Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, the Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license:
+
+      (a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer, to use, reproduce, modify, display, perform, sublicense and distribute the Original Software (or portions thereof), with or without Modifications, and/or as part of a Larger Work; and
+
+      (b) under Patent Claims infringed by the making, using or selling of Original Software, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Software (or portions thereof).
+
+      (c) The licenses granted in Sections 2.1(a) and (b) are effective on the date Initial Developer first distributes or otherwise makes the Original Software available to a third party under the terms of this License.
+
+      (d) Notwithstanding Section 2.1(b) above, no patent license is granted: (1) for code that You delete from the Original Software, or (2) for infringements caused by: (i) the modification of the Original Software, or (ii) the combination of the Original Software with other software or devices.
+
+      2.2. Contributor Grant.
+
+      Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license:
+
+      (a) under intellectual property rights (other than patent or trademark) Licensable by Contributor to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof), either on an unmodified basis, with other Modifications, as Covered Software and/or as part of a Larger Work; and
+
+      (b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: (1) Modifications made by that Contributor (or portions thereof); and (2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination).
+
+      (c) The licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first distributes or otherwise makes the Modifications available to a third party.
+
+      (d) Notwithstanding Section 2.2(b) above, no patent license is granted: (1) for any code that Contributor has deleted from the Contributor Version; (2) for infringements caused by: (i) third party modifications of Contributor Version, or (ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or (3) under Patent Claims infringed by Covered Software in the absence of Modifications made by that Contributor.
+
+      3. Distribution Obligations.
+
+      3.1. Availability of Source Code.
+
+      Any Covered Software that You distribute or otherwise make available in Executable form must also be made available in Source Code form and that Source Code form must be distributed only under the terms of this License. You must include a copy of this License with every copy of the Source Code form of the Covered Software You distribute or otherwise make available. You must inform recipients of any such Covered Software in Executable form as to how they can obtain such Covered Software in Source Code form in a reasonable manner on or through a medium customarily used for software exchange.
+
+      3.2. Modifications.
+
+      The Modifications that You create or to which You contribute are governed by the terms of this License. You represent that You believe Your Modifications are Your original creation(s) and/or You have sufficient rights to grant the rights conveyed by this License.
+
+      3.3. Required Notices.
+
+      You must include a notice in each of Your Modifications that identifies You as the Contributor of the Modification. You may not remove or alter any copyright, patent or trademark notices contained within the Covered Software, or any notices of licensing or any descriptive text giving attribution to any Contributor or the Initial Developer.
+
+      3.4. Application of Additional Terms.
+
+      You may not offer or impose any terms on any Covered Software in Source Code form that alters or restricts the applicable version of this License or the recipients’ rights hereunder. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, you may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear that any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer.
+
+      3.5. Distribution of Executable Versions.
+
+      You may distribute the Executable form of the Covered Software under the terms of this License or under the terms of a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable form does not attempt to limit or alter the recipient’s rights in the Source Code form from the rights set forth in this License. If You distribute the Covered Software in Executable form under a different license, You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer.
+
+      3.6. Larger Works.
+
+      You may create a Larger Work by combining Covered Software with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Software.
+
+      4. Versions of the License.
+
+      4.1. New Versions.
+
+      Sun Microsystems, Inc. is the initial license steward and may publish revised and/or new versions of this License from time to time. Each version will be given a distinguishing version number. Except as provided in Section 4.3, no one other than the license steward has the right to modify this License.
+
+      4.2. Effect of New Versions.
+
+      You may always continue to use, distribute or otherwise make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. If the Initial Developer includes a notice in the Original Software prohibiting it from being distributed or otherwise made available under any subsequent version of the License, You must distribute and make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. Otherwise, You may also choose to use, distribute or otherwise make the Covered Software available under the terms of any subsequent version of the License published by the license steward.
+
+      4.3. Modified Versions.
+
+      When You are an Initial Developer and You want to create a new license for Your Original Software, You may create and use a modified version of this License if You: (a) rename the license and remove any references to the name of the license steward (except to note that the license differs from this License); and (b) otherwise make it clear that the license contains terms which differ from this License.
+
+      5. DISCLAIMER OF WARRANTY.
+
+      COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN “AS IS” BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+      6. TERMINATION.
+
+      6.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive.
+
+      6.2. If You assert a patent infringement claim (excluding declaratory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You assert such claim is referred to as “Participant”) alleging that the Participant Software (meaning the Contributor Version where the Participant is a Contributor or the Original Software where the Participant is the Initial Developer) directly or indirectly infringes any patent, then any and all rights granted directly or indirectly to You by such Participant, the Initial Developer (if the Initial Developer is not the Participant) and all Contributors under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively and automatically at the expiration of such 60 day notice period, unless if within such 60 day period You withdraw Your claim with respect to the Participant Software against such Participant either unilaterally or pursuant to a written agreement with Participant.
+
+      6.3. In the event of termination under Sections 6.1 or 6.2 above, all end user licenses that have been validly granted by You or any distributor hereunder prior to termination (excluding licenses granted to You by any distributor) shall survive termination.
+
+      7. LIMITATION OF LIABILITY.
+
+      UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOST PROFITS, LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY’S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+      8. U.S. GOVERNMENT END USERS.
+
+      The Covered Software is a “commercial item,” as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of “commercial computer software” (as that term is defined at 48 C.F.R. § 252.227-7014(a)(1)) and “commercial computer software documentation” as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Software with only those rights set forth herein. This U.S. Government Rights clause is in lieu of, and supersedes, any other FAR, DFAR, or other clause or provision that addresses Government rights in computer software under this License.
+
+      9. MISCELLANEOUS.
+
+      This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by the law of the jurisdiction specified in a notice contained within the Original Software (except to the extent applicable law, if any, provides otherwise), excluding such jurisdiction’s conflict-of-law provisions. Any litigation relating to this License shall be subject to the jurisdiction of the courts located in the jurisdiction and venue specified in a notice contained within the Original Software, with the losing party responsible for costs, including, without limitation, court costs and reasonable attorneys’ fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. You agree that You alone are responsible for compliance with the United States export administration regulations (and the export control laws and regulation of any other countries) when You use, distribute or otherwise make available any Covered Software.
+
+      10. RESPONSIBILITY FOR CLAIMS.
+
+      As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability.
+
+      NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL)
+
+      The code released under the CDDL shall be governed by the laws of the State of California (excluding conflict-of-law provisions). Any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California and the state courts of the State of California, with venue lying in Santa Clara County, California.
+
+
+   ===
+
+   Component(s):
+
+   - JUnit (http://junit.org)
+     lib/junit-4.11.jar
+
+   Are available under the CPL 1.0:
+
+   --
+
+      Common Public License Version 1.0
+      THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON PUBLIC
+      LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM
+      CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+      1. DEFINITIONS
+
+      "Contribution" means:
+
+      a) in the case of the initial Contributor, the initial code and
+      documentation distributed under this Agreement, and
+
+      b) in the case of each subsequent Contributor:
+
+      i) changes to the Program, and
+
+      ii) additions to the Program;
+
+      where such changes and/or additions to the Program originate from and are
+      distributed by that particular Contributor. A Contribution 'originates' from a
+      Contributor if it was added to the Program by such Contributor itself or anyone
+      acting on such Contributor's behalf. Contributions do not include additions to
+      the Program which: (i) are separate modules of software distributed in
+      conjunction with the Program under their own license agreement, and (ii) are not
+      derivative works of the Program.
+
+      "Contributor" means any person or entity that distributes the Program.
+
+      "Licensed Patents " mean patent claims licensable by a Contributor which are
+      necessarily infringed by the use or sale of its Contribution alone or when
+      combined with the Program.
+
+      "Program" means the Contributions distributed in accordance with this Agreement.
+
+      "Recipient" means anyone who receives the Program under this Agreement,
+      including all Contributors.
+
+      2. GRANT OF RIGHTS
+
+      a) Subject to the terms of this Agreement, each Contributor hereby grants
+      Recipient a non-exclusive, worldwide, royalty-free copyright license to
+      reproduce, prepare derivative works of, publicly display, publicly perform,
+      distribute and sublicense the Contribution of such Contributor, if any, and such
+      derivative works, in source code and object code form.
+
+      b) Subject to the terms of this Agreement, each Contributor hereby grants
+      Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed
+      Patents to make, use, sell, offer to sell, import and otherwise transfer the
+      Contribution of such Contributor, if any, in source code and object code form.
+      This patent license shall apply to the combination of the Contribution and the
+      Program if, at the time the Contribution is added by the Contributor, such
+      addition of the Contribution causes such combination to be covered by the
+      Licensed Patents. The patent license shall not apply to any other combinations
+      which include the Contribution. No hardware per se is licensed hereunder.
+
+      c) Recipient understands that although each Contributor grants the licenses
+      to its Contributions set forth herein, no assurances are provided by any
+      Contributor that the Program does not infringe the patent or other intellectual
+      property rights of any other entity. Each Contributor disclaims any liability to
+      Recipient for claims brought by any other entity based on infringement of
+      intellectual property rights or otherwise. As a condition to exercising the
+      rights and licenses granted hereunder, each Recipient hereby assumes sole
+      responsibility to secure any other intellectual property rights needed, if any.
+      For example, if a third party patent license is required to allow Recipient to
+      distribute the Program, it is Recipient's responsibility to acquire that license
+      before distributing the Program.
+
+      d) Each Contributor represents that to its knowledge it has sufficient
+      copyright rights in its Contribution, if any, to grant the copyright license set
+      forth in this Agreement.
+
+      3. REQUIREMENTS
+
+      A Contributor may choose to distribute the Program in object code form under its
+      own license agreement, provided that:
+
+      a) it complies with the terms and conditions of this Agreement; and
+
+      b) its license agreement:
+
+      i) effectively disclaims on behalf of all Contributors all warranties and
+      conditions, express and implied, including warranties or conditions of title and
+      non-infringement, and implied warranties or conditions of merchantability and
+      fitness for a particular purpose;
+
+      ii) effectively excludes on behalf of all Contributors all liability for
+      damages, including direct, indirect, special, incidental and consequential
+      damages, such as lost profits;
+
+      iii) states that any provisions which differ from this Agreement are offered
+      by that Contributor alone and not by any other party; and
+
+      iv) states that source code for the Program is available from such
+      Contributor, and informs licensees how to obtain it in a reasonable manner on or
+      through a medium customarily used for software exchange.
+
+      When the Program is made available in source code form:
+
+      a) it must be made available under this Agreement; and
+
+      b) a copy of this Agreement must be included with each copy of the Program.
+
+      Contributors may not remove or alter any copyright notices contained within the
+      Program.
+
+      Each Contributor must identify itself as the originator of its Contribution, if
+      any, in a manner that reasonably allows subsequent Recipients to identify the
+      originator of the Contribution.
+
+      4. COMMERCIAL DISTRIBUTION
+
+      Commercial distributors of software may accept certain responsibilities with
+      respect to end users, business partners and the like. While this license is
+      intended to facilitate the commercial use of the Program, the Contributor who
+      includes the Program in a commercial product offering should do so in a manner
+      which does not create potential liability for other Contributors. Therefore, if
+      a Contributor includes the Program in a commercial product offering, such
+      Contributor ("Commercial Contributor") hereby agrees to defend and indemnify
+      every other Contributor ("Indemnified Contributor") against any losses, damages
+      and costs (collectively "Losses") arising from claims, lawsuits and other legal
+      actions brought by a third party against the Indemnified Contributor to the
+      extent caused by the acts or omissions of such Commercial Contributor in
+      connection with its distribution of the Program in a commercial product
+      offering. The obligations in this section do not apply to any claims or Losses
+      relating to any actual or alleged intellectual property infringement. In order
+      to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+      Contributor in writing of such claim, and b) allow the Commercial Contributor to
+      control, and cooperate with the Commercial Contributor in, the defense and any
+      related settlement negotiations. The Indemnified Contributor may participate in
+      any such claim at its own expense.
+
+      For example, a Contributor might include the Program in a commercial product
+      offering, Product X. That Contributor is then a Commercial Contributor. If that
+      Commercial Contributor then makes performance claims, or offers warranties
+      related to Product X, those performance claims and warranties are such
+      Commercial Contributor's responsibility alone. Under this section, the
+      Commercial Contributor would have to defend claims against the other
+      Contributors related to those performance claims and warranties, and if a court
+      requires any other Contributor to pay any damages as a result, the Commercial
+      Contributor must pay those damages.
+
+      5. NO WARRANTY
+
+      EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED 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. Each
+      Recipient is solely responsible for determining the appropriateness of using and
+      distributing the Program and assumes all risks associated with its exercise of
+      rights under this Agreement, including but not limited to the risks and costs of
+      program errors, compliance with applicable laws, damage to or loss of data,
+      programs or equipment, and unavailability or interruption of operations.
+
+      6. DISCLAIMER OF LIABILITY
+
+      EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY
+      CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+      SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST
+      PROFITS), 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 OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS
+      GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+      7. GENERAL
+
+      If any provision of this Agreement is invalid or unenforceable under applicable
+      law, it shall not affect the validity or enforceability of the remainder of the
+      terms of this Agreement, and without further action by the parties hereto, such
+      provision shall be reformed to the minimum extent necessary to make such
+      provision valid and enforceable.
+
+      If Recipient institutes patent litigation against a Contributor with respect to
+      a patent applicable to software (including a cross-claim or counterclaim in a
+      lawsuit), then any patent licenses granted by that Contributor to such Recipient
+      under this Agreement shall terminate as of the date such litigation is filed. In
+      addition, if Recipient institutes patent litigation against any entity
+      (including a cross-claim or counterclaim in a lawsuit) alleging that the Program
+      itself (excluding combinations of the Program with other software or hardware)
+      infringes such Recipient's patent(s), then such Recipient's rights granted under
+      Section 2(b) shall terminate as of the date such litigation is filed.
+
+      All Recipient's rights under this Agreement shall terminate if it fails to
+      comply with any of the material terms or conditions of this Agreement and does
+      not cure such failure in a reasonable period of time after becoming aware of
+      such noncompliance. If all Recipient's rights under this Agreement terminate,
+      Recipient agrees to cease use and distribution of the Program as soon as
+      reasonably practicable. However, Recipient's obligations under this Agreement
+      and any licenses granted by Recipient relating to the Program shall continue and
+      survive.
+
+      Everyone is permitted to copy and distribute copies of this Agreement, but in
+      order to avoid inconsistency the Agreement is copyrighted and may only be
+      modified in the following manner. The Agreement Steward reserves the right to
+      publish new versions (including revisions) of this Agreement from time to time.
+      No one other than the Agreement Steward has the right to modify this Agreement.
+      IBM is the initial Agreement Steward. IBM may assign the responsibility to serve
+      as the Agreement Steward to a suitable separate entity. Each new version of the
+      Agreement will be given a distinguishing version number. The Program (including
+      Contributions) may always be distributed subject to the version of the Agreement
+      under which it was received. In addition, after a new version of the Agreement
+      is published, Contributor may elect to distribute the Program (including its
+      Contributions) under the new version. Except as expressly stated in Sections
+      2(a) and 2(b) above, Recipient receives no rights or licenses to the
+      intellectual property of any Contributor under this Agreement, whether
+      expressly, by implication, estoppel or otherwise. All rights in the Program not
+      expressly granted under this Agreement are reserved.
+
+      This Agreement is governed by the laws of the State of New York and the
+      intellectual property laws of the United States of America. No party to this
+      Agreement will bring a legal action under this Agreement more than one year
+      after the cause of action arose. Each party waives its rights to a jury trial in
+      any resulting litigation.
+      --
+
+      ===
+      Component(s)
+
+      - SLF4J JCL Binding (http://www.slf4j.org) 
+        lib/slf4j-jcl-1.6.3.jar
+      - SLF4J API Module (http://www.slf4j.org/slf4j-api)
+        lib/slf4j-api-1.6.1.jar
+
+      are provided under the MIT license:
+
+      --
+      Copyright (c) 2004-2013 QOS.ch
+       All rights reserved.
+
+       Permission is hereby granted, free  of charge, to any person obtaining
+       a  copy  of this  software  and  associated  documentation files  (the
+       "Software"), to  deal in  the Software without  restriction, including
+       without limitation  the rights to  use, copy, modify,  merge, publish,
+       distribute,  sublicense, and/or sell  copies of  the Software,  and to
+       permit persons to whom the Software  is furnished to do so, subject to
+       the following conditions:
+       
+       The  above  copyright  notice  and  this permission  notice  shall  be
+       included in all copies or substantial portions of the Software.
+       
+       THE  SOFTWARE IS  PROVIDED  "AS  IS", WITHOUT  WARRANTY  OF ANY  KIND,
+       EXPRESS OR  IMPLIED, INCLUDING  BUT NOT LIMITED  TO THE  WARRANTIES OF
+       MERCHANTABILITY,    FITNESS    FOR    A   PARTICULAR    PURPOSE    AND
+       NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+       LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+       OF CONTRACT, TORT OR OTHERWISE,  ARISING FROM, OUT OF OR IN CONNECTION
+       WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+   --
+
+   ===
+   Component(s):
+   - JSON (JavaScript Object Notation) (http://www.json.org/java/index.html) 
+     lib/json-20090211.jar
+
+   are available under the JSON license:
+
+   --
+      Copyright (c) 2002 JSON.org
+
+      Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+      The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+      The Software shall be used for Good, not Evil.
+
+      THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+   --
+
+
+   ===
+   Component(s):
+
+   - args4j (http://args4j.dev.java.net/args4j/) 
+     lib/args4j-2.0.12.jar
+
+   are available under the MIT License:
+
+   --
+      Copyright (c) 2003, Kohsuke Kawaguchi
+
+      Permission is hereby granted, free of charge, to any person
+      obtaining a copy of this software and associated documentation
+      files (the "Software"), to deal in the Software without
+      restriction, including without limitation the rights to use,
+      copy, modify, merge, publish, distribute, sublicense, and/or sell
+      copies of the Software, and to permit persons to whom the
+      Software is furnished to do so, subject to the following
+      conditions:
+
+      The above copyright notice and this permission notice shall be
+      included in all copies or substantial portions of the Software.
+
+      THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+      EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+      OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+      NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+      HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+      WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+      FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+      OTHER DEALINGS IN THE SOFTWARE.
+   --
diff --git a/hyracks/hyracks-examples/tpch-example/tpchserver/src/main/licenses/NOTICE b/hyracks/hyracks-examples/tpch-example/tpchserver/src/main/licenses/NOTICE
new file mode 100644
index 0000000..791d0ba
--- /dev/null
+++ b/hyracks/hyracks-examples/tpch-example/tpchserver/src/main/licenses/NOTICE
@@ -0,0 +1,121 @@
+Apache AsterixDB
+Copyright 2016 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+AsterixDB utilizes many libraries, which come with the following applicable NOTICE(s):
+
+ - lib/hyracks-api-0.2.17-incubating.jar
+
+    hyracks-api
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/hyracks-comm-0.2.17-incubating.jar
+
+    hyracks-comm
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/hyracks-control-cc-0.2.17-incubating.jar
+
+    hyracks-control-cc
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/hyracks-control-common-0.2.17-incubating.jar
+
+    hyracks-control-common
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/hyracks-control-nc-0.2.17-incubating.jar
+
+    hyracks-control-nc
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/hyracks-control-cc-0.2.17-incubating.jar
+
+    hyracks-control-cc
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/hyracks-ipc-0.2.17-incubating.jar
+
+    hyracks-ipc
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/hyracks-net-0.2.17-incubating.jar
+
+    hyracks-net
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/hyracks-dataflow-common-0.2.17-incubating.jar
+
+    hyracks-dataflow-common
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/hyracks-dataflow-std-0.2.17-incubating.jar
+
+    hyracks-dataflow-std
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/hyracks-storage-am-btree-0.2.17-incubating.jar
+
+    hyracks-storage-am-btree
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/hyracks-storage-am-common-0.2.17-incubating.jar
+
+    hyracks-storage-am-common
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/hyracks-storage-common-0.2.17-incubating.jar
+
+    hyracks-storage-common
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/hyracks-data-std-0.2.17-incubating.jar
+
+    hyracks-data-std
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/hyracks-util-0.2.17-incubating.jar
+
+    hyracks-util
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/wicket-core-1.5.2.jar
+   Apache Wicket
+   Copyright 2006-2011 Apache Software Foundation
+
+   This product includes software from QOS.ch (http://slf4j.org) licensed under the X11 license
+   Copyright (c) 2004-2008 QOS.ch
+
+   Contains Diff library from Mavens JRCS, released under
+   The Apache Software License, Version 1.1.
+   (c) 1999-2003
+
+   org.apache.wicket.markup.html.form.upload.MultiFileUploadField.js is taken from [1]
+   and has the following notice:
+      "Licence:
+       Use this however/wherever you like, just don't blame me if it breaks
+       anything.
+
+       Credit:
+       If you're nice, you'll leave this bit:
+
+       Class by Stickman -- http://www.the-stickman.com
+       with thanks to:
+       [for Safari fixes]
+          Luis Torrefranca -- http://www.law.pitt.edu
+          and
+          Shawn Parker & John Pennypacker -- http://www.fuzzycoconut.com
+       [for duplicate name bug]
+          'neal'"
+   [1]: http://the-stickman.com/web-development/javascript/upload-multiple-files-with-a-single-file-element/
+ - lib/wicket-request-1.5.2.jar
+
+    Wicket Request
+    Copyright 2006-2011 Apache Software Foundation
+
+ - lib/wicket-util-1.5.2.jar
+
+    Wicket Util
+    Copyright 2006-2011 Apache Software Foundation
diff --git a/hyracks/hyracks-server/src/main/assembly/binary-assembly.xml b/hyracks/hyracks-server/src/main/assembly/binary-assembly.xml
index 7ef6fd0..f56121d 100644
--- a/hyracks/hyracks-server/src/main/assembly/binary-assembly.xml
+++ b/hyracks/hyracks-server/src/main/assembly/binary-assembly.xml
@@ -42,11 +42,17 @@
       <directory>target/classes/META-INF</directory>
       <outputDirectory>.</outputDirectory>
       <includes>
-        <include>LICENSE*</include>
-        <include>NOTICE*</include>
         <include>DISCLAIMER*</include>
         <include>DEPENDENCIES*</include>
       </includes>
     </fileSet>
+    <fileSet>
+      <directory>src/main/licenses</directory>
+      <outputDirectory>.</outputDirectory>
+      <includes>
+        <include>LICENSE*</include>
+        <include>NOTICE*</include>
+      </includes>
+    </fileSet>
  </fileSets>
 </assembly>
diff --git a/hyracks/hyracks-server/src/main/licenses/LICENSE b/hyracks/hyracks-server/src/main/licenses/LICENSE
new file mode 100644
index 0000000..1ea2250
--- /dev/null
+++ b/hyracks/hyracks-server/src/main/licenses/LICENSE
@@ -0,0 +1,708 @@
+
+                                 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.
+
+
+   ASTERIXDB COMPONENTS:
+
+   AsterixDB 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 condition of the following
+   licenses.
+
+   Components under Apache License 2.0 are as follows:
+
+     - HttpClient (http://hc.apache.org/httpcomponents-client)
+       lib/httpclient-4.3.jar
+     - HttpCore (http://hc.apache.org/httpcomponents-core-ga)
+       lib/httpcore-4.3.jar
+     - Jetty :: Continuation (http://www.eclipse.org/jetty/jetty-continuation)
+       lib/jetty-continuation-8.0.0.RC0.jar
+     - Jetty :: Http Utility (http://www.eclipse.org/jetty/jetty-http)
+       lib/jetty-http-8.0.0.RC0.jar
+     - Jetty :: IO Utility (http://www.eclipse.org/jetty/jetty-io)
+       lib/jetty-io-8.0.0.RC0.jar
+     - Jetty :: Security (http://www.eclipse.org/jetty/jetty-security)
+       lib/jetty-security-8.0.0.RC0.jar
+     - Jetty :: Server Core (http://www.eclipse.org/jetty)
+       lib/jetty-server-8.0.0.RC0.jar
+     - Jetty :: Servlet Handling (http://www.eclipse.org/jetty/jetty-servlet)
+       lib/jetty-servlet-8.0.0.RC0.jar
+     - Jetty :: Utilities (http://www.eclipse.org/jetty/jetty-util)
+       lib/jetty-util-8.0.0.RC0.jar
+     - Jetty :: Webapp Application Support (http://www.eclipse.org/jetty/jetty-webapp)
+       lib/jetty-webapp-8.0.0.RC0.jar
+     - Jetty :: XML utilities (http://www.eclipse.org/jetty/jetty-xml)
+       lib/jetty-xml-8.0.0.RC0.jar
+     - Servlet API (http://www.eclipse.org/jetty/jetty-parent/servlet-api)
+       lib/servlet-api-3.0.20100224.jar
+     - Wicket Core (http://wicket.apache.org/wicket-core/wicket-core)
+       lib/wicket-core-1.5.2.jar
+     - Wicket Request (http://maven.apache.org)
+       lib/wicket-request-1.5.2.jar
+     - Wicket Util (http://maven.apache.org)
+       lib/wicket-util-1.5.2.jar
+     - Apache Commons Codec (http://commons.apache.org/codec/commons-codec)
+       lib/commons-codec-1.4.jar
+     - Commons IO (http://commons.apache.org/io/)
+       lib/commons-io-2.4.jar
+     - Apache Commons Logging (http://commons.apache.org/logging)
+       lib/commons-logging-1.1.1.jar
+     - Commons Lang (http://commons.apache.org/lang/)
+       lib/commons-lang3-3.1.jar
+
+   ===
+
+   Component(s):
+   - Java Servlet API (http://servlet-spec.java.net)
+     lib/javax.servlet-3.0.20100224.jar
+
+
+   are available under the CDDL 1.0
+   --
+      COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0
+
+      1. Definitions.
+
+      1.1. “Contributor” means each individual or entity that creates or contributes to the creation of Modifications.
+
+      1.2. “Contributor Version” means the combination of the Original Software, prior Modifications used by a Contributor (if any), and the Modifications made by that particular Contributor.
+
+      1.3. “Covered Software” means (a) the Original Software, or (b) Modifications, or (c) the combination of files containing Original Software with files containing Modifications, in each case including portions thereof.
+
+      1.4. “Executable” means the Covered Software in any form other than Source Code.
+
+      1.5. “Initial Developer” means the individual or entity that first makes Original Software available under this License.
+
+      1.6. “Larger Work” means a work which combines Covered Software or portions thereof with code not governed by the terms of this License.
+
+      1.7. “License” means this document.
+
+      1.8. “Licensable” means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein.
+
+      1.9. “Modifications” means the Source Code and Executable form of any of the following:
+
+      A. Any file that results from an addition to, deletion from or modification of the contents of a file containing Original Software or previous Modifications;
+
+      B. Any new file that contains any part of the Original Software or previous Modification; or
+
+      C. Any new file that is contributed or otherwise made available under the terms of this License.
+
+      1.10. “Original Software” means the Source Code and Executable form of computer software code that is originally released under this License.
+
+      1.11. “Patent Claims” means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor.
+
+      1.12. “Source Code” means (a) the common form of computer software code in which modifications are made and (b) associated documentation included in or with such code.
+
+      1.13. “You” (or “Your”) means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, “You” includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, “control” means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity.
+
+      2. License Grants.
+
+      2.1. The Initial Developer Grant.
+
+      Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, the Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license:
+
+      (a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer, to use, reproduce, modify, display, perform, sublicense and distribute the Original Software (or portions thereof), with or without Modifications, and/or as part of a Larger Work; and
+
+      (b) under Patent Claims infringed by the making, using or selling of Original Software, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Software (or portions thereof).
+
+      (c) The licenses granted in Sections 2.1(a) and (b) are effective on the date Initial Developer first distributes or otherwise makes the Original Software available to a third party under the terms of this License.
+
+      (d) Notwithstanding Section 2.1(b) above, no patent license is granted: (1) for code that You delete from the Original Software, or (2) for infringements caused by: (i) the modification of the Original Software, or (ii) the combination of the Original Software with other software or devices.
+
+      2.2. Contributor Grant.
+
+      Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license:
+
+      (a) under intellectual property rights (other than patent or trademark) Licensable by Contributor to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof), either on an unmodified basis, with other Modifications, as Covered Software and/or as part of a Larger Work; and
+
+      (b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: (1) Modifications made by that Contributor (or portions thereof); and (2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination).
+
+      (c) The licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first distributes or otherwise makes the Modifications available to a third party.
+
+      (d) Notwithstanding Section 2.2(b) above, no patent license is granted: (1) for any code that Contributor has deleted from the Contributor Version; (2) for infringements caused by: (i) third party modifications of Contributor Version, or (ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or (3) under Patent Claims infringed by Covered Software in the absence of Modifications made by that Contributor.
+
+      3. Distribution Obligations.
+
+      3.1. Availability of Source Code.
+
+      Any Covered Software that You distribute or otherwise make available in Executable form must also be made available in Source Code form and that Source Code form must be distributed only under the terms of this License. You must include a copy of this License with every copy of the Source Code form of the Covered Software You distribute or otherwise make available. You must inform recipients of any such Covered Software in Executable form as to how they can obtain such Covered Software in Source Code form in a reasonable manner on or through a medium customarily used for software exchange.
+
+      3.2. Modifications.
+
+      The Modifications that You create or to which You contribute are governed by the terms of this License. You represent that You believe Your Modifications are Your original creation(s) and/or You have sufficient rights to grant the rights conveyed by this License.
+
+      3.3. Required Notices.
+
+      You must include a notice in each of Your Modifications that identifies You as the Contributor of the Modification. You may not remove or alter any copyright, patent or trademark notices contained within the Covered Software, or any notices of licensing or any descriptive text giving attribution to any Contributor or the Initial Developer.
+
+      3.4. Application of Additional Terms.
+
+      You may not offer or impose any terms on any Covered Software in Source Code form that alters or restricts the applicable version of this License or the recipients’ rights hereunder. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, you may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear that any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer.
+
+      3.5. Distribution of Executable Versions.
+
+      You may distribute the Executable form of the Covered Software under the terms of this License or under the terms of a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable form does not attempt to limit or alter the recipient’s rights in the Source Code form from the rights set forth in this License. If You distribute the Covered Software in Executable form under a different license, You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer.
+
+      3.6. Larger Works.
+
+      You may create a Larger Work by combining Covered Software with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Software.
+
+      4. Versions of the License.
+
+      4.1. New Versions.
+
+      Sun Microsystems, Inc. is the initial license steward and may publish revised and/or new versions of this License from time to time. Each version will be given a distinguishing version number. Except as provided in Section 4.3, no one other than the license steward has the right to modify this License.
+
+      4.2. Effect of New Versions.
+
+      You may always continue to use, distribute or otherwise make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. If the Initial Developer includes a notice in the Original Software prohibiting it from being distributed or otherwise made available under any subsequent version of the License, You must distribute and make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. Otherwise, You may also choose to use, distribute or otherwise make the Covered Software available under the terms of any subsequent version of the License published by the license steward.
+
+      4.3. Modified Versions.
+
+      When You are an Initial Developer and You want to create a new license for Your Original Software, You may create and use a modified version of this License if You: (a) rename the license and remove any references to the name of the license steward (except to note that the license differs from this License); and (b) otherwise make it clear that the license contains terms which differ from this License.
+
+      5. DISCLAIMER OF WARRANTY.
+
+      COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN “AS IS” BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+      6. TERMINATION.
+
+      6.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive.
+
+      6.2. If You assert a patent infringement claim (excluding declaratory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You assert such claim is referred to as “Participant”) alleging that the Participant Software (meaning the Contributor Version where the Participant is a Contributor or the Original Software where the Participant is the Initial Developer) directly or indirectly infringes any patent, then any and all rights granted directly or indirectly to You by such Participant, the Initial Developer (if the Initial Developer is not the Participant) and all Contributors under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively and automatically at the expiration of such 60 day notice period, unless if within such 60 day period You withdraw Your claim with respect to the Participant Software against such Participant either unilaterally or pursuant to a written agreement with Participant.
+
+      6.3. In the event of termination under Sections 6.1 or 6.2 above, all end user licenses that have been validly granted by You or any distributor hereunder prior to termination (excluding licenses granted to You by any distributor) shall survive termination.
+
+      7. LIMITATION OF LIABILITY.
+
+      UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOST PROFITS, LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY’S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+      8. U.S. GOVERNMENT END USERS.
+
+      The Covered Software is a “commercial item,” as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of “commercial computer software” (as that term is defined at 48 C.F.R. § 252.227-7014(a)(1)) and “commercial computer software documentation” as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Software with only those rights set forth herein. This U.S. Government Rights clause is in lieu of, and supersedes, any other FAR, DFAR, or other clause or provision that addresses Government rights in computer software under this License.
+
+      9. MISCELLANEOUS.
+
+      This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by the law of the jurisdiction specified in a notice contained within the Original Software (except to the extent applicable law, if any, provides otherwise), excluding such jurisdiction’s conflict-of-law provisions. Any litigation relating to this License shall be subject to the jurisdiction of the courts located in the jurisdiction and venue specified in a notice contained within the Original Software, with the losing party responsible for costs, including, without limitation, court costs and reasonable attorneys’ fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. You agree that You alone are responsible for compliance with the United States export administration regulations (and the export control laws and regulation of any other countries) when You use, distribute or otherwise make available any Covered Software.
+
+      10. RESPONSIBILITY FOR CLAIMS.
+
+      As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability.
+
+      NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL)
+
+      The code released under the CDDL shall be governed by the laws of the State of California (excluding conflict-of-law provisions). Any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California and the state courts of the State of California, with venue lying in Santa Clara County, California.
+
+
+   ===
+
+   Component(s):
+
+   - JUnit (http://junit.org)
+     lib/junit-4.11.jar
+
+   Are available under the CPL 1.0:
+
+   --
+
+      Common Public License Version 1.0
+      THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON PUBLIC
+      LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM
+      CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+      1. DEFINITIONS
+
+      "Contribution" means:
+
+      a) in the case of the initial Contributor, the initial code and
+      documentation distributed under this Agreement, and
+
+      b) in the case of each subsequent Contributor:
+
+      i) changes to the Program, and
+
+      ii) additions to the Program;
+
+      where such changes and/or additions to the Program originate from and are
+      distributed by that particular Contributor. A Contribution 'originates' from a
+      Contributor if it was added to the Program by such Contributor itself or anyone
+      acting on such Contributor's behalf. Contributions do not include additions to
+      the Program which: (i) are separate modules of software distributed in
+      conjunction with the Program under their own license agreement, and (ii) are not
+      derivative works of the Program.
+
+      "Contributor" means any person or entity that distributes the Program.
+
+      "Licensed Patents " mean patent claims licensable by a Contributor which are
+      necessarily infringed by the use or sale of its Contribution alone or when
+      combined with the Program.
+
+      "Program" means the Contributions distributed in accordance with this Agreement.
+
+      "Recipient" means anyone who receives the Program under this Agreement,
+      including all Contributors.
+
+      2. GRANT OF RIGHTS
+
+      a) Subject to the terms of this Agreement, each Contributor hereby grants
+      Recipient a non-exclusive, worldwide, royalty-free copyright license to
+      reproduce, prepare derivative works of, publicly display, publicly perform,
+      distribute and sublicense the Contribution of such Contributor, if any, and such
+      derivative works, in source code and object code form.
+
+      b) Subject to the terms of this Agreement, each Contributor hereby grants
+      Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed
+      Patents to make, use, sell, offer to sell, import and otherwise transfer the
+      Contribution of such Contributor, if any, in source code and object code form.
+      This patent license shall apply to the combination of the Contribution and the
+      Program if, at the time the Contribution is added by the Contributor, such
+      addition of the Contribution causes such combination to be covered by the
+      Licensed Patents. The patent license shall not apply to any other combinations
+      which include the Contribution. No hardware per se is licensed hereunder.
+
+      c) Recipient understands that although each Contributor grants the licenses
+      to its Contributions set forth herein, no assurances are provided by any
+      Contributor that the Program does not infringe the patent or other intellectual
+      property rights of any other entity. Each Contributor disclaims any liability to
+      Recipient for claims brought by any other entity based on infringement of
+      intellectual property rights or otherwise. As a condition to exercising the
+      rights and licenses granted hereunder, each Recipient hereby assumes sole
+      responsibility to secure any other intellectual property rights needed, if any.
+      For example, if a third party patent license is required to allow Recipient to
+      distribute the Program, it is Recipient's responsibility to acquire that license
+      before distributing the Program.
+
+      d) Each Contributor represents that to its knowledge it has sufficient
+      copyright rights in its Contribution, if any, to grant the copyright license set
+      forth in this Agreement.
+
+      3. REQUIREMENTS
+
+      A Contributor may choose to distribute the Program in object code form under its
+      own license agreement, provided that:
+
+      a) it complies with the terms and conditions of this Agreement; and
+
+      b) its license agreement:
+
+      i) effectively disclaims on behalf of all Contributors all warranties and
+      conditions, express and implied, including warranties or conditions of title and
+      non-infringement, and implied warranties or conditions of merchantability and
+      fitness for a particular purpose;
+
+      ii) effectively excludes on behalf of all Contributors all liability for
+      damages, including direct, indirect, special, incidental and consequential
+      damages, such as lost profits;
+
+      iii) states that any provisions which differ from this Agreement are offered
+      by that Contributor alone and not by any other party; and
+
+      iv) states that source code for the Program is available from such
+      Contributor, and informs licensees how to obtain it in a reasonable manner on or
+      through a medium customarily used for software exchange.
+
+      When the Program is made available in source code form:
+
+      a) it must be made available under this Agreement; and
+
+      b) a copy of this Agreement must be included with each copy of the Program.
+
+      Contributors may not remove or alter any copyright notices contained within the
+      Program.
+
+      Each Contributor must identify itself as the originator of its Contribution, if
+      any, in a manner that reasonably allows subsequent Recipients to identify the
+      originator of the Contribution.
+
+      4. COMMERCIAL DISTRIBUTION
+
+      Commercial distributors of software may accept certain responsibilities with
+      respect to end users, business partners and the like. While this license is
+      intended to facilitate the commercial use of the Program, the Contributor who
+      includes the Program in a commercial product offering should do so in a manner
+      which does not create potential liability for other Contributors. Therefore, if
+      a Contributor includes the Program in a commercial product offering, such
+      Contributor ("Commercial Contributor") hereby agrees to defend and indemnify
+      every other Contributor ("Indemnified Contributor") against any losses, damages
+      and costs (collectively "Losses") arising from claims, lawsuits and other legal
+      actions brought by a third party against the Indemnified Contributor to the
+      extent caused by the acts or omissions of such Commercial Contributor in
+      connection with its distribution of the Program in a commercial product
+      offering. The obligations in this section do not apply to any claims or Losses
+      relating to any actual or alleged intellectual property infringement. In order
+      to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+      Contributor in writing of such claim, and b) allow the Commercial Contributor to
+      control, and cooperate with the Commercial Contributor in, the defense and any
+      related settlement negotiations. The Indemnified Contributor may participate in
+      any such claim at its own expense.
+
+      For example, a Contributor might include the Program in a commercial product
+      offering, Product X. That Contributor is then a Commercial Contributor. If that
+      Commercial Contributor then makes performance claims, or offers warranties
+      related to Product X, those performance claims and warranties are such
+      Commercial Contributor's responsibility alone. Under this section, the
+      Commercial Contributor would have to defend claims against the other
+      Contributors related to those performance claims and warranties, and if a court
+      requires any other Contributor to pay any damages as a result, the Commercial
+      Contributor must pay those damages.
+
+      5. NO WARRANTY
+
+      EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED 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. Each
+      Recipient is solely responsible for determining the appropriateness of using and
+      distributing the Program and assumes all risks associated with its exercise of
+      rights under this Agreement, including but not limited to the risks and costs of
+      program errors, compliance with applicable laws, damage to or loss of data,
+      programs or equipment, and unavailability or interruption of operations.
+
+      6. DISCLAIMER OF LIABILITY
+
+      EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY
+      CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+      SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST
+      PROFITS), 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 OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS
+      GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+      7. GENERAL
+
+      If any provision of this Agreement is invalid or unenforceable under applicable
+      law, it shall not affect the validity or enforceability of the remainder of the
+      terms of this Agreement, and without further action by the parties hereto, such
+      provision shall be reformed to the minimum extent necessary to make such
+      provision valid and enforceable.
+
+      If Recipient institutes patent litigation against a Contributor with respect to
+      a patent applicable to software (including a cross-claim or counterclaim in a
+      lawsuit), then any patent licenses granted by that Contributor to such Recipient
+      under this Agreement shall terminate as of the date such litigation is filed. In
+      addition, if Recipient institutes patent litigation against any entity
+      (including a cross-claim or counterclaim in a lawsuit) alleging that the Program
+      itself (excluding combinations of the Program with other software or hardware)
+      infringes such Recipient's patent(s), then such Recipient's rights granted under
+      Section 2(b) shall terminate as of the date such litigation is filed.
+
+      All Recipient's rights under this Agreement shall terminate if it fails to
+      comply with any of the material terms or conditions of this Agreement and does
+      not cure such failure in a reasonable period of time after becoming aware of
+      such noncompliance. If all Recipient's rights under this Agreement terminate,
+      Recipient agrees to cease use and distribution of the Program as soon as
+      reasonably practicable. However, Recipient's obligations under this Agreement
+      and any licenses granted by Recipient relating to the Program shall continue and
+      survive.
+
+      Everyone is permitted to copy and distribute copies of this Agreement, but in
+      order to avoid inconsistency the Agreement is copyrighted and may only be
+      modified in the following manner. The Agreement Steward reserves the right to
+      publish new versions (including revisions) of this Agreement from time to time.
+      No one other than the Agreement Steward has the right to modify this Agreement.
+      IBM is the initial Agreement Steward. IBM may assign the responsibility to serve
+      as the Agreement Steward to a suitable separate entity. Each new version of the
+      Agreement will be given a distinguishing version number. The Program (including
+      Contributions) may always be distributed subject to the version of the Agreement
+      under which it was received. In addition, after a new version of the Agreement
+      is published, Contributor may elect to distribute the Program (including its
+      Contributions) under the new version. Except as expressly stated in Sections
+      2(a) and 2(b) above, Recipient receives no rights or licenses to the
+      intellectual property of any Contributor under this Agreement, whether
+      expressly, by implication, estoppel or otherwise. All rights in the Program not
+      expressly granted under this Agreement are reserved.
+
+      This Agreement is governed by the laws of the State of New York and the
+      intellectual property laws of the United States of America. No party to this
+      Agreement will bring a legal action under this Agreement more than one year
+      after the cause of action arose. Each party waives its rights to a jury trial in
+      any resulting litigation.
+      --
+
+      ===
+      Component(s)
+
+      - SLF4J JCL Binding (http://www.slf4j.org) 
+        lib/slf4j-jcl-1.6.3.jar
+      - SLF4J API Module (http://www.slf4j.org/slf4j-api)
+        lib/slf4j-api-1.6.1.jar
+
+      are provided under the MIT license:
+
+      --
+      Copyright (c) 2004-2013 QOS.ch
+       All rights reserved.
+
+       Permission is hereby granted, free  of charge, to any person obtaining
+       a  copy  of this  software  and  associated  documentation files  (the
+       "Software"), to  deal in  the Software without  restriction, including
+       without limitation  the rights to  use, copy, modify,  merge, publish,
+       distribute,  sublicense, and/or sell  copies of  the Software,  and to
+       permit persons to whom the Software  is furnished to do so, subject to
+       the following conditions:
+       
+       The  above  copyright  notice  and  this permission  notice  shall  be
+       included in all copies or substantial portions of the Software.
+       
+       THE  SOFTWARE IS  PROVIDED  "AS  IS", WITHOUT  WARRANTY  OF ANY  KIND,
+       EXPRESS OR  IMPLIED, INCLUDING  BUT NOT LIMITED  TO THE  WARRANTIES OF
+       MERCHANTABILITY,    FITNESS    FOR    A   PARTICULAR    PURPOSE    AND
+       NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+       LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+       OF CONTRACT, TORT OR OTHERWISE,  ARISING FROM, OUT OF OR IN CONNECTION
+       WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+   --
+
+   ===
+   Component(s):
+   - JSON (JavaScript Object Notation) (http://www.json.org/java/index.html) 
+     lib/json-20090211.jar
+
+   are available under the JSON license:
+
+   --
+      Copyright (c) 2002 JSON.org
+
+      Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+      The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+      The Software shall be used for Good, not Evil.
+
+      THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+   --
+
+
+   ===
+   Component(s):
+
+   - args4j (http://args4j.dev.java.net/args4j/) 
+     lib/args4j-2.0.12.jar
+
+   are available under the MIT License:
+
+   --
+      Copyright (c) 2003, Kohsuke Kawaguchi
+
+      Permission is hereby granted, free of charge, to any person
+      obtaining a copy of this software and associated documentation
+      files (the "Software"), to deal in the Software without
+      restriction, including without limitation the rights to use,
+      copy, modify, merge, publish, distribute, sublicense, and/or sell
+      copies of the Software, and to permit persons to whom the
+      Software is furnished to do so, subject to the following
+      conditions:
+
+      The above copyright notice and this permission notice shall be
+      included in all copies or substantial portions of the Software.
+
+      THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+      EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+      OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+      NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+      HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+      WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+      FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+      OTHER DEALINGS IN THE SOFTWARE.
+   --
+
diff --git a/hyracks/hyracks-server/src/main/licenses/NOTICE b/hyracks/hyracks-server/src/main/licenses/NOTICE
new file mode 100644
index 0000000..ccbf2b3
--- /dev/null
+++ b/hyracks/hyracks-server/src/main/licenses/NOTICE
@@ -0,0 +1,81 @@
+Apache AsterixDB
+Copyright 2016 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+AsterixDB utilizes many libraries, which come with the following applicable NOTICE(s):
+
+ - lib/hyracks-api-0.2.17-incubating.jar
+
+    hyracks-api
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/hyracks-comm-0.2.17-incubating.jar
+
+    hyracks-comm
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/hyracks-control-cc-0.2.17-incubating.jar
+
+    hyracks-control-cc
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/hyracks-control-common-0.2.17-incubating.jar
+
+    hyracks-control-common
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/hyracks-control-nc-0.2.17-incubating.jar
+
+    hyracks-control-nc
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/hyracks-ipc-0.2.17-incubating.jar
+
+    hyracks-ipc
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/hyracks-net-0.2.17-incubating.jar
+
+    hyracks-net
+    Copyright 2016 The Apache Software Foundation
+
+ - lib/wicket-core-1.5.2.jar
+   Apache Wicket
+   Copyright 2006-2011 Apache Software Foundation
+
+   This product includes software from QOS.ch (http://slf4j.org) licensed under the X11 license
+   Copyright (c) 2004-2008 QOS.ch
+
+   Contains Diff library from Mavens JRCS, released under
+   The Apache Software License, Version 1.1.
+   (c) 1999-2003
+
+   org.apache.wicket.markup.html.form.upload.MultiFileUploadField.js is taken from [1]
+   and has the following notice:
+      "Licence:
+       Use this however/wherever you like, just don't blame me if it breaks
+       anything.
+
+       Credit:
+       If you're nice, you'll leave this bit:
+
+       Class by Stickman -- http://www.the-stickman.com
+       with thanks to:
+       [for Safari fixes]
+          Luis Torrefranca -- http://www.law.pitt.edu
+          and
+          Shawn Parker & John Pennypacker -- http://www.fuzzycoconut.com
+       [for duplicate name bug]
+          'neal'"
+   [1]: http://the-stickman.com/web-development/javascript/upload-multiple-files-with-a-single-file-element/
+ - lib/wicket-request-1.5.2.jar
+
+    Wicket Request
+    Copyright 2006-2011 Apache Software Foundation
+
+ - lib/wicket-util-1.5.2.jar
+
+    Wicket Util
+    Copyright 2006-2011 Apache Software Foundation
