  ------
  Meta Data Reference
  ------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~
~~  Licensed to the Apache Software Foundation (ASF) under one
~~  or more contributor license agreements.  See the NOTICE file
~~  distributed with this work for additional information
~~  regarding copyright ownership.  The ASF licenses this file
~~  to you under the Apache License, Version 2.0 (the
~~  "License"); you may not use this file except in compliance
~~  with the License.  You may obtain a copy of the License at
~~
~~    http://www.apache.org/licenses/LICENSE-2.0
~~
~~  Unless required by applicable law or agreed to in writing,
~~  software distributed under the License is distributed on an
~~  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
~~  KIND, either express or implied.  See the License for the
~~  specific language governing permissions and limitations
~~  under the License.
~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Apache Whisker Meta-Data Model

 Jump into

%{toc|section=1|fromDepth=2|toDepth=3}

 or read on.

* Breakdown

 The meta data relates licensing information about the contents of an assembled release
 efficiently. It break down into three sections:

 [[I]] Licenses, notices and organisations each described here once (then reused);

 [[I]] Primary license, notice and organisation for the application released; and

 [[I]] Contents of each directory, grouped by organisation and license.

* Some Objects Modeled

** {Section I} - Licenses, Notices and Organisations

[meta-data-section1.png] Section I

 License, notice and organisations are define independently. Each can then be efficiently
 referenced in many places by simple <<<id>>>. Each <<<id>>> must be a unique <<<ID>>> (in xml terms). Adopting
 a regular naming convention is recommended. Some typical conventions:

  * use the domain name as the <<<id>>> for an organisation;

  * use the {{{http://www.opensource.org} Open Source Initiative}} code as the <<<id>>>
    for an open source license

 Note that <<<organisation>>> includes any entity attributed as creator. Including (for example)

  * the name of an author;

  * a pseudonym;

  * a corporation;

  * a development community;

  * the Apache Software Foundation.

** {Section II} - Primary Details

 The primary license, notice and organisation associated with the work reference data in {{{Section I}Section I}} by <<<id>>>.
 This is the collective copyright for the act of composition. The components aggregated in the distribution
 are detailed in {{{Section III}Section III}}.

** {Section III} - Contents

 This final section groups resources contained in each directory by organisation and license.

[meta-data-section3.png] Section III

 The deep nesting groups the resources contained in each directory by license and organisation
 to reduce duplication. Licenses, notices and organisations are linked by <<<id>>> to the definitions
 in {{{Section I} Section I}}.

 Directories are modeled using a flat structure without nesting. Paths are relative to the
 root directory of the distribution (indicated by '.') and separated by <<<//>>>.

+------------------------------------------------------------------------+

    <within dir='.'>
        <with-license ...
    </within>
    <within dir='WEB-INF'>
        <with-license ...
    </within>
    <within dir='WEB-INF/conf'>
        <with-license ...
    </within>
    <within dir='WEB-INF/lib'>
        <with-license ...
    </within>

+------------------------------------------------------------------------+


* Described By DTD

 Useful for visual editors.

+------------------------------------------------------------------------+
<!DOCTYPE manifest [

<!ELEMENT manifest (licenses, notices, organisations,
    primary-license, primary-notice?, primary-organisation?, within*)>
<!-- Collects license descriptions -->
<!ELEMENT licenses (license*)>
<!-- Describes a copyright license -->
<!ELEMENT license (template?, text)>
<!ATTLIST license name CDATA #REQUIRED>
<!ATTLIST license url CDATA #IMPLIED>
<!ATTLIST license id ID #REQUIRED>
<!-- Some licenses require a link to source code -->
<!ATTLIST license requires-source (yes|no) "no">
<!-- The words expressing the license -->
<!ELEMENT text (#PCDATA)>
<!-- Template license families have parameterised license wording -->
<!ELEMENT template (parameter-name+)>
<!-- The name of a parameter to be substituted -->
<!ELEMENT parameter-name (#PCDATA)>

<!-- Collects notice descriptions -->
<!ELEMENT notices (notice*)>
<!-- Describes notice text to be preserved -->
<!ELEMENT notice (#PCDATA)>
<!ATTLIST notice id ID #REQUIRED>

<!-- Collections organisation descriptions -->
<!ELEMENT organisations (organisation*)>
<!-- Descibres an upstream organisation -->
<!ELEMENT organisation EMPTY>
<!ATTLIST organisation id ID #REQUIRED>
<!ATTLIST organisation name CDATA #REQUIRED>
<!ATTLIST organisation url CDATA #IMPLIED>

<!-- The primary license for the application -->
<!ELEMENT primary-license (copyright-notice?)>
<!-- References the license by id attribute -->
<!ATTLIST primary-license id IDREF #REQUIRED>

<!-- The text of the application's primary notice -->
<!ELEMENT primary-notice (#PCDATA)>

<!-- The organisation responsible for the application -->
<!ELEMENT primary-organisation EMPTY>
<!-- References the organisation by id attribute -->
<!ATTLIST primary-organisation id IDREF #REQUIRED>

<!-- Collects the resources within a directory-->
<!ELEMENT within (public-domain?, with-license*)>
<!ATTLIST within dir CDATA #REQUIRED>

<!-- Collects resources sharing licensing qualities -->
<!ELEMENT with-license (copyright-notice?, license-parameters?, by-organisation*)>
<!-- Refers to a license defined above by ID -->
<!ATTLIST with-license id IDREF #REQUIRED>
<!-- A copyright claim -->
<!ELEMENT copyright-notice (#PCDATA)>
<!-- Values substituted into the text of template licenses -->
<!ELEMENT license-parameters (parameter*)>
<!ELEMENT parameter (name, value)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT value (#PCDATA)>

<!-- Collects resources in the public domain -->
<!ELEMENT public-domain (by-organisation*)>

<!-- Collects resources issued by an upstream organisation -->
<!ELEMENT by-organisation (resource*)>
<!ATTLIST by-organisation id IDREF #REQUIRED>

<!-- Contained in the application release -->
<!ELEMENT resource EMPTY>
<!ATTLIST resource name CDATA #REQUIRED>
<!ATTLIST resource sha1 CDATA #IMPLIED>
<!ATTLIST resource notice IDREF #IMPLIED>
<!ATTLIST resource source CDATA #IMPLIED>
]>
+------------------------------------------------------------------------+


* Some More Advanced Features Explained

** Public Domain

 Some contemporary laws make it surprisingly difficult for an author to place a work in the public domain.
 See <<<{{{http://creativecommons.org} creativecommons.org}}>>>
 for {{{http://creativecommons.org/about/cc0} more}}
 {{{http://creativecommons.org/weblog/entry/23830} explanation}}.

 Whisker supports works in the public domain through <<<public-domain>>> blocks <<<within>>> a directory.
 A <<<resource>>> in the public domain should be grouped <<<by-organisation>>> within the <<<public-domain>>>
 block.

+------------------------------------------------------------------------+

    <within dir='.'>
        <public-domain>
            <by-organisation id='An Author'>
                <resource name='A Work In The Public Domain'/>
            </by-organisation>
        </public-domain>
    </within>

+------------------------------------------------------------------------+

*** A Public Domain Example

 This simple example illustrates how <Guide to the Lakes> by William Wordsworth
 (now in the public domain) may be indicated.
 Source is {{{./examples/public-domain.xml}here}}.

+------------------------------------------------------------------------+
<manifest>
    <licenses>
        <license id='LICENSE' name='A License'>
            <text>The words of the license</text>
        </license>
    </licenses>
    <notices/>
    <organisations>
        <organisation id="ORG" name='An Organisation'/>
        <!--
        The original author must still be credited
        even for works in the public domain.
        Copyrights to the works of William Wordsworth
        (1770-1850)
        have now expired.
                                              -->
        <organisation id="WilliamWordsworth" name='William Wordsworth'/>
    </organisations>
    <primary-license id='LICENSE'/>
    <primary-organisation id='ORG'/>

    <within dir='.'>
        <!--
            The public domain block should be included
            when the directory contains a resources
            in the public domain.
                     -->
        <public-domain>
            <by-organisation id='WilliamWordsworth'>
            <!--
                Copyrights to 'Guide to the Lakes'
                by William Wordsworth have now expired.
                It is in the public domain.
                         -->
                <resource name='Guide to the Lakes'/>
            </by-organisation>
        </public-domain>
    </within>
</manifest>

+------------------------------------------------------------------------+

** Variable Copyright Notices

 A copyright notice is a simple claim of ownership, typically by an author of the work. For example

+------------------------------------------------------------------------+
        Copyright (c) YEAR A.N.AUTHOR
+------------------------------------------------------------------------+

 <<Do not>> confuse a <copyright notice> with the <<<NOTICE>>> that some licenses require to be
 distributed. A typical <<<NOTICE>>> contains attribution information
 (for example <This products contains software developed by the Apache Software Foundation>)
 as well as a copyright notice.

 Many license definitions (for example, The {{{http://www.opensource.org/licenses/mit-license.php} MIT License}})
 conventionally include a copyright notice. The contents of these copyright notices vary widely.

 Whisker separates <<<copyright-notice>>> from <<<license>>> to reduce duplication.
 (Optionally) a <<<copyright-notice>>> begins a <<<with-license>>> block,
 before <<<resource>>> grouped <<<by-organisation>>>
 sharing this <<<copyright-notice>>> and <<<license>>>.

+------------------------------------------------------------------------+
    <with-license id='MIT'>
        <copyright-notice>
Copyright (c) YEAR A.N.AUTHOR
All rights reserved.
        </copyright-notice>
        <by-organisation id='example.org'>
                <resource name='document.txt'/>
                ...

+------------------------------------------------------------------------+

*** An Example Separation Into License and Notice

 Here is an example instance of the
 {{{http://www.opensource.org/licenses/mit-license.php} MIT License}}

+------------------------------------------------------------------------+
Copyright (c) YEAR-YEAR A.N.AUTHOR
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.
+------------------------------------------------------------------------+


 To allow the <<<license>>> to be reused, add the <<<text>>>
 excluding the copyright notice.

+------------------------------------------------------------------------+
        <license
            name='MIT License'
            id='MIT'
            url='http://www.opensource.org/licenses/mit-license.php'>
            <text>
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.
            </text>
        </license>
+------------------------------------------------------------------------+

 Add the appropriate <<<copyright-notice>>> applying to the <<<resource>>>.

+------------------------------------------------------------------------+

        <with-license id='MIT'>
        <copyright-notice>
Copyright (c) YEAR-YEAR A.N.AUTHOR
All rights reserved.
        </copyright-notice>
            <by-organisation id='example.org'>
                <resource name='mit-licensed-document-by-A-N-Author.txt'/>
                ...
+------------------------------------------------------------------------+


** Templates For License Families

 Some familiar open source licenses (for example,
 the {{{http://www.opensource.org/licenses/BSD-3-Clause}BSD 3-Clause License}}) are better understood
 as families of licenses. Each family is based on a parameterised template. When the license is used,
 an appropriate value is substituted for each parameter.

 Whisker supports template licenses with parameter substitution. Parameter names are defined by <<<parameter-name>>> elements
 within a <<<template>>> block.

+------------------------------------------------------------------------+
        <license ...
            <template>
                <parameter-name>foo</parameter-name>
                ...
            </template>
            ...
+------------------------------------------------------------------------+

 Each <<<$\{parameter name\}>>> within the license <<<text>>> will be substituted by
 the <<<value>>> with matching <<<name>>> within a <<<parameter>>> in a <<<license-parameters>>> block. When referring
 to a template license, this block is required. All parameter names defined must have exactly one value specified.

+------------------------------------------------------------------------+
    <license-parameters>
      <parameter>
        <name>foo</name>
        <value>bar</value>
      </parameter>
      ...
+------------------------------------------------------------------------+



*** A Template Example

 This simple template example features a <<<Hello, World>>> license.
 Source is {{{./examples/template-license.xml}here}}.

+------------------------------------------------------------------------+
<manifest>
    <licenses>
        <!-- A template license -->
        <license id='TL1' name='A Template License'>
            <!--
                Parameter names in this section.
                Values must be set for all parameters.
                                                -->
            <template>
                <!-- ${FOO} will be substituted wherever it occurs -->
                <parameter-name>FOO</parameter-name>
                <!-- ${BAR} will be substituted wherever it occurs -->
                <parameter-name>BAR</parameter-name>
            </template>
            <!-- Wherever ${FOO} and ${BAR} are found will be substituted.-->
            <text>
                ${BAR}, ${FOO}.
            </text>
        </license>
    </licenses>
    ...
    <within dir='.'>
        <with-license id='TL1'>
            <!--
                When a template license is referenced,
                a license-parameter block must exist
                and contain one value for each defined
                parameter
                                                        -->
            <license-parameters>
                <parameter>
                    <!-- Replace ${FOO} with 'world' -->
                    <name>FOO</name>
                    <value>world</value>
                </parameter>
                <parameter>
                    <!-- Replace ${BAR} with 'Hello' -->
                    <name>BAR</name>
                    <value>hello</value>
                </parameter>
            </license-parameters>
            <!--
                After substituting values for parameters,
                the license reads: Hello, world.
                                                        -->
        </with-license>
    </within>
</manifest>
+------------------------------------------------------------------------+

** Source Links

*** Background

 Some {{{./faq.html#what-weak-copyleft}weak copyleft}} licenses contain a
 {{{./faq.html#what-source-clause}source clause}}
 (for example, the {{{http://www.opensource.org/licenses/CDDL-1.0} CDDL 1.0}}).
 A good way to satisfy a source clause is to include the source
 within the distribution. An alternative approach (which is advantageous
 when size is important)
 is to include a URL linking
 to the source within the <<<NOTICE>>> or <<<LICENSE>>>.

*** Support For Source URLs

 Whisker supports source links for a <<<resource>>> through the optional
 <<<source>>> attribute. The primary motivation for this is to support
 weak copyleft licenses, though many people like the idea of crediting
 creators by including a link.

 Including a source URL generates an appropriate entry in the NOTICE.

*** Learn More

 Learn more about source clauses {{{./faq.html#what-source-clause}here}}.

 Learn about copyright and software licensing {{{./faq.html#more-resources'}here}}.

 Read more about licenses {{{./faq.html#what-is-a-license}here}}.

 Read more about weak copyleft licenses
            {{{./faq.html#what-weak-copyleft'}here}}.

* A Sample

  Describes components assembled into the {{{http://james.apache.org}Apache James}}
  {{{http://james.apache.org/server}mail server}}.
  Find the source {{{./examples/james.xml}here}}.

+------------------------------------------------------------------------+
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
    <licenses>
        <license
            name='Day Specification License with Addendum'
            id='DaySpecLicensePlusAddendum'
            url='http://www.day.com/content/dam/day/downloads/jsr283/LICENSE.txt'>
            <text>
Day Management AG ("Licensor") is willing to license this specification to you ONLY UPON
THE CONDITION THAT YOU ACCEPT ALL OF THE TERMS CONTAINED IN THIS LICENSE AGREEMENT
("Agreement"). Please read the terms and conditions of this Agreement carefully.

Content Repository for JavaTM Technology API Specification ("Specification")
Version: 2.0
Status: FCS
Release: 10 August 2009

Copyright 2009 Day Management AG
Barfüsserplatz 6, 4001 Basel, Switzerland.
All rights reserved.

NOTICE; LIMITED LICENSE GRANTS

1. License for Purposes of Evaluation and Developing Applications. Licensor hereby grants
   you a fully-paid, non-exclusive, non-transferable, worldwide, limited license (without the
   right to sublicense), under Licensor's applicable intellectual property rights to view,
   download, use and reproduce the Specification only for the purpose of internal evaluation.
   This includes developing applications intended to run on an implementation of the
   Specification provided that such applications do not themselves implement any portion(s)
   of the Specification.

2. License for the Distribution of Compliant Implementations. Licensor also grants you a
   perpetual, non-exclusive, non-transferable, worldwide, fully paid-up, royalty free, limited
   license (without the right to sublicense) under any applicable copyrights or, subject to
   the provisions of subsection 4 below, patent rights it may have covering the Specification
   to create and/or distribute an Independent Implementation of the Specification that:

      (a) fully implements the Specification including all its required interfaces and
          functionality;
      (b) does not modify, subset, superset or otherwise extend the Licensor Name Space,
          or include any public or protected packages, classes, Java interfaces, fields
          or methods within the Licensor Name Space other than those required/authorized
          by the Specification or Specifications being implemented; and
      (c) passes the Technology Compatibility Kit (including satisfying the requirements
          of the applicable TCK Users Guide) for such Specification ("Compliant Implementation").
          In addition, the foregoing license is expressly conditioned on your not acting
          outside its scope. No license is granted hereunder for any other purpose (including,
          for example, modifying the Specification, other than to the extent of your fair use
          rights, or distributing the Specification to third parties).

3. Pass-through Conditions. You need not include limitations (a)-(c) from the previous paragraph
   or any other particular "pass through" requirements in any license You grant concerning the
   use of your Independent Implementation or products derived from it. However, except with
   respect to Independent Implementations (and products derived from them) that satisfy
   limitations (a)-(c) from the previous paragraph, You may neither:

       (a) grant or otherwise pass through to your licensees any licenses under Licensor's
           applicable intellectual property rights; nor
       (b) authorize your licensees to make any claims concerning their implementation's
           compliance with the Specification.

4. Reciprocity Concerning Patent Licenses. With respect to any patent claims covered by the
   license granted under subparagraph 2 above that would be infringed by all technically
   feasible implementations of the Specification, such license is conditioned upon your
   offering on fair, reasonable and non-discriminatory terms, to any party seeking it from
   You, a perpetual, non-exclusive, non-transferable, worldwide license under Your patent
   rights that are or would be infringed by all technically feasible implementations of the
   Specification to develop, distribute and use a Compliant Implementation.

5. Definitions. For the purposes of this Agreement: "Independent Implementation" shall mean an
   implementation of the Specification that neither derives from any of Licensor's source code
   or binary code materials nor, except with an appropriate and separate license from Licensor,
   includes any of Licensor's source code or binary code materials; "Licensor Name Space" shall
   mean the public class or interface declarations whose names begin with "java", "javax",
   "javax.jcr" or their equivalents in any subsequent naming convention adopted by Licensor
   through the Java Community Process, or any recognized successors or replacements thereof;
   and "Technology Compatibility Kit" or "TCK" shall mean the test suite and accompanying TCK
   User's Guide provided by Licensor which corresponds to the particular version of the
   Specification being tested.

6. Termination. This Agreement will terminate immediately without notice from Licensor if
   you fail to comply with any material provision of or act outside the scope of the licenses
   granted above.

7. Trademarks. No right, title, or interest in or to any trademarks, service marks, or trade
   names of Licensor is granted hereunder. Java is a registered trademark of Sun Microsystems,
   Inc. in the United States and other countries.

8. Disclaimer of Warranties. The Specification is provided "AS IS". LICENSOR MAKES NO
   REPRESENTATIONS OR WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO,
   WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT
   (INCLUDING AS A CONSEQUENCE OF ANY PRACTICE OR IMPLEMENTATION OF THE SPECIFICATION),
   OR THAT THE CONTENTS OF THE SPECIFICATION ARE SUITABLE FOR ANY PURPOSE. This document
   does not represent any commitment to release or implement any portion of the Specification
   in any product.

   The Specification could include technical inaccuracies or typographical errors. Changes are
   periodically added to the information therein; these changes will be incorporated into new
   versions of the Specification, if any. Licensor may make improvements and/or changes to the
   product(s) and/or the program(s) described in the Specification at any time. Any use of such
   changes in the Specification will be governed by the then-current license for the applicable
   version of the Specification.

9. Limitation of Liability. TO THE EXTENT NOT PROHIBITED BY LAW, IN NO EVENT WILL LICENSOR
   BE LIABLE FOR ANY DAMAGES, INCLUDING WITHOUT LIMITATION, LOST REVENUE, PROFITS OR DATA, OR
   FOR SPECIAL, INDIRECT, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND
   REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF OR RELATED TO ANY FURNISHING,
   PRACTICING, MODIFYING OR ANY USE OF THE SPECIFICATION, EVEN IF LICENSOR HAS BEEN ADVISED
   OF THE POSSIBILITY OF SUCH DAMAGES.

10. Report. If you provide Licensor with any comments or suggestions in connection with your
    use of the Specification ("Feedback"), you hereby: (i) agree that such Feedback is provided
    on a non-proprietary and non-confidential basis, and (ii) grant Licensor a perpetual,
    non-exclusive, worldwide, fully paid-up, irrevocable license, with the right to sublicense
    through multiple levels of sublicensees, to incorporate, disclose, and use without
    limitation the Feedback for any purpose related to the Specification and future versions,
    implementations, and test suites thereof.

Day Specification License Addendum

In addition to the permissions granted under the Specification
License, Day Management AG hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
license to reproduce, publicly display, publicly perform,
sublicense, and distribute unmodified copies of the Content
Repository for Java Technology API (JCR 2.0) Java Archive (JAR)
file ("jcr-2.0.jar") and to make, have made, use, offer to sell,
sell, import, and otherwise transfer said file on its own or
as part of a larger work that makes use of the JCR API.

With respect to any patent claims covered by this license
that would be infringed by all technically feasible implementations
of the Specification, such license is conditioned upon your
offering on fair, reasonable and non-discriminatory terms,
to any party seeking it from You, a perpetual, non-exclusive,
non-transferable, worldwide license under Your patent rights
that are or would be infringed by all technically feasible
implementations of the Specification to develop, distribute
and use a Compliant Implementation.

            </text>
</license>
        <license name='COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0' id='CDDL'
        url='http://www.opensource.org/licenses/CDDL-1.0' requires-source='yes'>
        <text>
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.
        </text>
        </license>
        <license name='MIT License' id='MIT'
            url='http://www.opensource.org/licenses/mit-license.php'>
            <text>
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.
            </text>
        </license>
        <license name='Tanuki Software License' id='TanukiSoftwareLicense'>
        <text>
  Copyright (c) 1999, 2006 Tanuki Software, Inc.

  Permission is hereby granted, free of charge, to any person
  obtaining a copy of the Java Service Wrapper 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, sub-license,
  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
  NON-INFRINGEMENT. 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.


  Portions of the Software have been derived from source code
  developed by Silver Egg Technology under the following license:

    Copyright (c) 2001 Silver Egg Technology

    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, sub-license, 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
    NON-INFRINGEMENT. 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.
        </text>
        </license>
        <license name='BSD (3-clause)' id='BSD3ClauseGeneric'
            url='http://www.opensource.org/licenses/BSD-3-Clause'>
            <text>
  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.
            </text>
        </license>

        <license name='BSD (3-clause)' id ='BSD3Clause'
            url='http://www.opensource.org/licenses/BSD-3-Clause'>
                <template>
                    <parameter-name>organisation</parameter-name>
                </template>
                <text>
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 ${organisation} 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.
            </text>
        </license>
        <license name='Bouncy Castle Licence' id='BouncyCastleLicense' url='http://www.bouncycastle.org/licence.html'>
            <text>
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.
            </text>
        </license>
        <license name='Apache License, Version 2' id='ApacheLicenseVersion2' url='http://www.apache.org/licenses/LICENSE-2.0.txt'>
<text>
                                 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
</text>
        </license>
    </licenses>
    <notices>
        <notice id='spring-framework-3.0.5.RELEASE'>
== NOTICE file corresponding to section 4 d of the Apache License,  ==
== Version 2.0, for the Spring Framework distribution.              ==
======================================================================

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

The end-user documentation included with a redistribution, if any,
must include the following acknowledgement:

 "This product includes software developed by the Spring Framework
  Project (http://www.springframework.org)."

Alternately, this acknowledgement may appear in the software itself,
if and wherever such third-party acknowledgements normally appear.

The names "Spring", "Spring Framework", and "Spring Web Flow" must
not be used to endorse or promote products derived from this
software without prior written permission. For written permission,
please contact enquiries@springsource.com.
        </notice>
        <notice id='org.jasypt:jasypt:jar:1.6'>
This distribution includes cryptographic software.  The country in
which you currently reside may have restrictions on the import,
possession, use, and/or re-export to another country, of
encryption software.  BEFORE using any encryption software, please
check your country's laws, regulations and policies concerning the
import, possession, or use, and re-export of encryption software, to
see if this is permitted.  See http://www.wassenaar.org/ for more
information.

The U.S. Government Department of Commerce, Bureau of Industry and
Security (BIS), has classified this software as Export Commodity
Control Number (ECCN) 5D002.C.1, which includes information security
software using or performing cryptographic functions with asymmetric
algorithms.  The form and manner of this distribution makes it
eligible for export under the License Exception ENC Technology
Software Unrestricted (TSU) exception (see the BIS Export
Administration Regulations, Section 740.13) for both object code and
source code.

The following provides more details on the cryptographic software
used (note that this software is not included in the distribution):

  * The PBE Encryption facilities require the Java Cryptography
    extensions: http://java.sun.com/javase/technologies/security/.

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

Distributions of this software may include software developed by
The Apache Software Foundation (http://www.apache.org/).

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


ICU License - ICU 1.8.1 and later

COPYRIGHT AND PERMISSION NOTICE

Copyright (c) 1995-2006 International Business Machines
Corporation and others

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, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so,
provided that the above copyright notice(s) and this
permission notice appear in all copies of the Software and
that both the above copyright notice(s) and this
permission notice appear in supporting documentation.

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 OF THIRD PARTY RIGHTS. IN NO
EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN
THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL
INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
USE OR PERFORMANCE OF THIS SOFTWARE.

Except as contained in this notice, the name of a copyright
holder shall not be used in advertising or otherwise to
promote the sale, use or other dealings in this Software
without prior written authorization of the copyright holder.
        </notice>
    </notices>
    <organisations>
        <organisation
            id='SpringFramework'
            name='The Spring Framework Project'
            url='http://www.springframework.org'/>
        <organisation
            id='Boilerpipe'
            name='Boilerpipe'
            url='http://code.google.com/p/boilerpipe/'/>
        <organisation
            id='person:John.Cowan'
            name='John Cowan'
            url='http://home.ccil.org/~cowan/XML/tagsoup/'
        />
        <organisation
            id='TheLegionoftheBouncyCastle'
            url='http://www.bouncycastle.org/'
            name='The Legion of the Bouncy Castle'
            />
        <organisation
            id='person:Brian.Wellington'
            name='Brian Wellington'/>
        <organisation
            id='serp.sourceforge.net'
            name = "The Serp Project"
            url='http://serp.sourceforge.net/'/>
        <organisation
            id='person:Drew.Noakes'
            name='Drew Noakes'/>
        <organisation
            id='person:Doug.Lea'
            name='Doug Lea'/>
        <organisation
            id='TheAOPAlliance'
            name='The AOP Alliance'
            url='http://aopalliance.sourceforge.net/'/>
        <organisation
            id='apache.org'
            name='The Apache Software Foundation'
            url='http://www.apache.org/'/>
        <organisation
            id='TanukiSoftware'
            name='Tanuki Software'
            url='http://www.tanukisoftware.com/'/>
        <organisation
            id='OW2'
            name='OW2'
            url='http://www.ow2.org/'/>
        <organisation
            id='qos.ch'
            name='QOS.ch'
            url='http://www.qos.ch'/>
        <organisation
            id='jboss.org'
            name='JBoss, a division of Red Hat, Inc.'
            url='http://www.jboss.org'
            />
        <organisation
            id='oracle.com'
            name='Oracle'
            url='http://www.oracle.com'
            />
        <organisation
            id='fusesource.org'
            name='FuseSource'
            url='http://www.fusesource.org'/>
        <organisation
            id='day.com'
            name='Day Software'
            url='http://www.day.com'/>
        <organisation
            id='jasypt.org'
            name='The JASYPT team'
            url='http://www.jasypt.org'/>

    </organisations>
    <primary-license id='ApacheLicenseVersion2'/>
    <primary-notice>
=========================================================================
==      NOTICE file for use with the Apache License, Version 2.0,      ==
=========================================================================

Apache JAMES Server
Copyright 1999-${year} The Apache Software Foundation

This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).
    </primary-notice>
    <primary-organisation id='apache.org'/>

    <within dir='.'>
        <with-license id='ApacheLicenseVersion2'>
            <by-organisation id='apache.org'>
                <resource name='LICENSE'/>
                <resource name='NOTICE'/>
                <resource name='README.crypto'/>
                <resource name='README.txt'/>
            </by-organisation>
        </with-license>
    </within>
    <within dir='bin'>
        <with-license id='TanukiSoftwareLicense'>
            <by-organisation id='TanukiSoftware'>
                <resource name='james'/>
                <resource name='james.bat'/>
                <resource name='wrapper'/>
                <resource name='wrapper-linux-ppc-64'/>
                <resource name='wrapper-linux-x86-32'/>
                <resource name='wrapper-linux-x86-64'/>
                <resource name='wrapper-macosx-ppc-32'/>
                <resource name='wrapper-macosx-universal-32'/>
                <resource name='wrapper-solaris-sparc-32'/>
                <resource name='wrapper-solaris-sparc-64'/>
                <resource name='wrapper-solaris-x86-32'/>
                <resource name='wrapper-windows-x86-32.exe'/>
            </by-organisation>
        </with-license>
        <with-license id='ApacheLicenseVersion2'>
            <by-organisation id='apache.org'>
                <resource name='james-cli.bat'/>
                <resource name='james-cli.sh'/>
                <resource name='run.bat'/>
                <resource name='run.sh'/>
                <resource name='setenv.bat'/>
                <resource name='setenv.sh'/>
            </by-organisation>
        </with-license>
    </within>
    <within dir='conf'>
        <with-license id='TanukiSoftwareLicense'>
            <by-organisation id='TanukiSoftware'>
                <resource name='wrapper.conf'/>
            </by-organisation>
        </with-license>
        <with-license id='ApacheLicenseVersion2'>
            <by-organisation id='apache.org'>
                <resource name='database.properties'/>
                <resource name='dnsservice.xml'/>
                <resource name='domainlist.xml'/>
                <resource name='fetchmail.xml'/>
                <resource name='imapserver.xml'/>
                <resource name='jcr-repository.xml'/>
                <resource name='jmx.properties'/>
                <resource name='lmtpserver.xml'/>
                <resource name='log4j.properties'/>
                <resource name='mailbox.xml'/>
                <resource name='mailetcontainer.xml'/>
                <resource name='mailrepositorystore.xml'/>
                <resource name='pop3server.xml'/>
                <resource name='recipientrewritetable.xml'/>
                <resource name='smtpserver.xml'/>
                <resource name='sqlResources.xml'/>
                <resource name='usersrepository.xml'/>
                <resource name='usersrepository23.xml'/>
            </by-organisation>
        </with-license>
    </within>
    <within dir='conf/META-INF'>
        <with-license id='ApacheLicenseVersion2'>
            <by-organisation id='apache.org'>
                <resource name='persistence.xml'/>
            </by-organisation>
        </with-license>
    </within>
    <within dir='conf/context'>
        <with-license id='ApacheLicenseVersion2'>
            <by-organisation id='apache.org'>
                <resource name='james-mailbox-jcr-context.xml'/>
                <resource name='james-mailbox-jpa-context.xml'/>
                <resource name='james-mailbox-maildir-context.xml'/>
                <resource name='james-mailbox-memory-context.xml'/>
                <resource name='james-server-context.xml'/>
            </by-organisation>
        </with-license>
    </within>
    <within dir='conf/lib'>
        <with-license id='ApacheLicenseVersion2'>
            <by-organisation id='apache.org'>
                <resource name='README.txt'/>
            </by-organisation>
        </with-license>
    </within>
    <within dir='log'>
    <with-license id='ApacheLicenseVersion2'>
            <by-organisation id='apache.org'>
                <resource name='.dummy'/>
            </by-organisation>
        </with-license>
    </within>
    <within dir='var'>
        <with-license id='ApacheLicenseVersion2'>
            <by-organisation id='apache.org'>
                <resource name='README.txt'/>
            </by-organisation>
        </with-license>
    </within>
    <within dir='var/mail'>
        <with-license id='ApacheLicenseVersion2'>
            <by-organisation id='apache.org'>
                <resource name='README.txt'/>
            </by-organisation>
        </with-license>
    </within>
    <within dir='var/store'>
        <with-license id='ApacheLicenseVersion2'>
            <by-organisation id='apache.org'>
                <resource name='README.txt'/>
            </by-organisation>
        </with-license>
    </within>
    <within dir='lib'>
        <public-domain>
            <by-organisation id='TheAOPAlliance'>
                <resource name='aopalliance-1.0.jar'/>
            </by-organisation>
            <by-organisation id='person:Doug.Lea'>
                <resource name='concurrent-1.3.4.jar'/>
            </by-organisation>
            <by-organisation id='person:Drew.Noakes'>
                <resource name='metadata-extractor-2.4.0-beta-1.jar'/>
            </by-organisation>
        </public-domain>
        <with-license id='TanukiSoftwareLicense'>
            <by-organisation id='TanukiSoftware'>
                <resource name='libwrapper-linux-ppc-64.so'/>
                <resource name='libwrapper-linux-x86-32.so'/>
                <resource name='libwrapper-linux-x86-64.so'/>
                <resource name='libwrapper-macosx-ppc-32.jnilib'/>
                <resource name='libwrapper-macosx-universal-32.jnilib'/>
                <resource name='libwrapper-solaris-sparc-32.so'/>
                <resource name='libwrapper-solaris-sparc-64.so'/>
                <resource name='libwrapper-solaris-x86-32.so'/>
                <resource name='wrapper-windows-x86-32.dll'/>
                <resource name='wrapper.jar'/>
            </by-organisation>
        </with-license>
        <with-license id='DaySpecLicensePlusAddendum'>
            <by-organisation id='day.com'>
                <resource name='jcr-2.0.jar'/>
            </by-organisation>
        </with-license>
        <with-license id='CDDL'>
            <by-organisation id='oracle.com'>
                <resource name='mail-1.4.4.jar' source='http://kenai.com/projects/javamail/downloads'/>
            </by-organisation>
        </with-license>
        <with-license id='MIT'>
        <copyright-notice>
Copyright (c) 2004-2008 QOS.ch
All rights reserved.
        </copyright-notice>
            <by-organisation id='qos.ch'>
                <resource name='jcl-over-slf4j-1.6.1.jar'/>
                <resource name='slf4j-api-1.6.1.jar'/>
                <resource name='slf4j-log4j12-1.6.1.jar'/>
            </by-organisation>
        </with-license>
        <with-license id='ApacheLicenseVersion2'>
             <by-organisation id='oracle.com'>
                <resource name='rome-0.9.jar'/>
            </by-organisation>
            <by-organisation id='jasypt.org'>
                <resource name='jasypt-1.6.jar' notice='org.jasypt:jasypt:jar:1.6'/>
            </by-organisation>
            <by-organisation id='fusesource.org'>
                <resource name='commons-management-1.0.jar'/>
            </by-organisation>
            <by-organisation id='jboss.org'>
                <resource name='netty-3.2.4.Final.jar'/>
            </by-organisation>
            <by-organisation id='apache.org'>
                <resource name='activeio-core-3.1.2.jar'/>
                <resource name='activemq-core-5.4.2.jar'/>
                <resource name='activemq-protobuf-1.1.jar'/>
                <resource name='apache-james-imap-api-0.2.1.jar'/>
                <resource name='apache-james-imap-message-0.2.1.jar'/>
                <resource name='apache-james-imap-processor-0.2.1.jar'/>
                <resource name='apache-james-mailbox-api-0.3.jar'/>
                <resource name='apache-james-mailbox-jcr-0.3.jar'/>
                <resource name='apache-james-mailbox-jpa-0.3.jar'/>
                <resource name='apache-james-mailbox-maildir-0.3.jar'/>
                <resource name='apache-james-mailbox-memory-0.3.jar'/>
                <resource name='apache-james-mailbox-store-0.3.jar'/>
                <resource name='apache-james-mailbox-tool-0.3.jar'/>
                <resource name='apache-jsieve-0.4.jar'/>
                <resource name='apache-jsieve-mailet-0.4.jar'/>
                <resource name='apache-jspf-resolver-0.9.9.jar'/>
                <resource name='apache-mailet-2.4.jar'/>
                <resource name='apache-mailet-base-1.1.jar'/>
                <resource name='apache-mime4j-0.6.1.jar'/>
                <resource name='apache-standard-mailets-1.1.jar'/>
                <resource name='camel-core-2.5.0.jar'/>
                <resource name='camel-spring-2.5.0.jar'/>
                <resource name='commons-cli-1.2.jar'/>
                <resource name='commons-codec-1.5.jar'/>
                <resource name='commons-collections-3.2.1.jar'/>
                <resource name='commons-compress-1.1.jar'/>
                <resource name='commons-configuration-1.6.jar'/>
                <resource name='commons-daemon-1.0.5.jar'/>
                <resource name='commons-dbcp-1.4.jar'/>
                <resource name='commons-httpclient-3.0.1.jar'/>
                <resource name='commons-io-2.0.1.jar'/>
                <resource name='commons-lang-2.6.jar'/>
                <resource name='commons-logging-1.0.3.jar'/>
                <resource name='commons-logging-api-1.1.jar'/>
                <resource name='commons-pool-1.5.5.jar'/>
                <resource name='derby-10.7.1.1.jar'/>
                <resource name='geronimo-annotation_1.0_spec-1.1.1.jar'/>
                <resource name='geronimo-annotation_1.1_spec-1.0.1.jar'/>
                <resource name='geronimo-j2ee-management_1.1_spec-1.0.1.jar'/>
                <resource name='geronimo-jms_1.1_spec-1.0.jar'/>
                <resource name='geronimo-jpa_2.0_spec-1.0.jar'/>
                <resource name='geronimo-jta_1.1_spec-1.1.1.jar'/>
                <resource name='geronimo-stax-api_1.0_spec-1.0.1.jar'/>
                <resource name='jackrabbit-api-2.2.5.jar'/>
                <resource name='jackrabbit-core-2.2.5.jar'/>
                <resource name='jackrabbit-jcr-commons-2.2.5.jar'/>
                <resource name='jackrabbit-spi-2.2.5.jar'/>
                <resource name='jackrabbit-spi-commons-2.2.5.jar'/>
                <resource name='james-server-cli-3.0-beta3.jar'/>
                <resource name='james-server-container-spring-3.0-beta3.jar'/>
                <resource name='james-server-core-3.0-beta3.jar'/>
                <resource name='james-server-data-api-3.0-beta3.jar'/>
                <resource name='james-server-data-library-3.0-beta3.jar'/>
                <resource name='james-server-dnsservice-api-3.0-beta3.jar'/>
                <resource name='james-server-dnsservice-dnsjava-3.0-beta3.jar'/>
                <resource name='james-server-dnsservice-library-3.0-beta3.jar'/>
                <resource name='james-server-fetchmail-3.0-beta3.jar'/>
                <resource name='james-server-file-3.0-beta3.jar'/>
                <resource name='james-server-filesystem-api-3.0-beta3.jar'/>
                <resource name='james-server-imapserver-3.0-beta3.jar'/>
                <resource name='james-server-jcr-3.0-beta3.jar'/>
                <resource name='james-server-jdbc-3.0-beta3.jar'/>
                <resource name='james-server-jpa-3.0-beta3.jar'/>
                <resource name='james-server-ldap-3.0-beta3.jar'/>
                <resource name='james-server-lifecycle-api-3.0-beta3.jar'/>
                <resource name='james-server-lifecycle-spring-3.0-beta3.jar'/>
                <resource name='james-server-lmtpserver-3.0-beta3.jar'/>
                <resource name='james-server-mailbox-adapter-3.0-beta3.jar'/>
                <resource name='james-server-mailetcontainer-api-3.0-beta3.jar'/>
                <resource name='james-server-mailetcontainer-camel-3.0-beta3.jar'/>
                <resource name='james-server-mailets-3.0-beta3.jar'/>
                <resource name='james-server-pop3server-3.0-beta3.jar'/>
                <resource name='james-server-protocols-library-3.0-beta3.jar'/>
                <resource name='james-server-queue-activemq-3.0-beta3.jar'/>
                <resource name='james-server-queue-api-3.0-beta3.jar'/>
                <resource name='james-server-queue-jms-3.0-beta3.jar'/>
                <resource name='james-server-smtpserver-3.0-beta3.jar'/>
                <resource name='james-server-util-3.0-beta3.jar'/>
                <resource name='kahadb-5.4.2.jar'/>
                <resource name='log4j-1.2.16.jar'/>
                <resource name='lucene-core-2.4.1.jar'/>
                <resource name='openjpa-2.1.0.jar'/>
                <resource name='poi-3.7.jar'/>
                <resource name='protocols-api-1.5.jar'/>
                <resource name='protocols-impl-1.5.jar'/>
                <resource name='protocols-smtp-1.5.jar'/>
                <resource name='xbean-spring-3.6.jar'/>
                <resource name='tika-core-0.8.jar'/>
                <resource name='tika-parsers-0.8.jar'/>
            </by-organisation>
            <by-organisation id='SpringFramework'>
                <resource name='spring-aop-3.0.5.RELEASE.jar' notice='spring-framework-3.0.5.RELEASE'/>
                <resource name='spring-asm-3.0.5.RELEASE.jar' notice='spring-framework-3.0.5.RELEASE'/>
                <resource name='spring-beans-3.0.5.RELEASE.jar' notice='spring-framework-3.0.5.RELEASE'/>
                <resource name='spring-context-3.0.5.RELEASE.jar' notice='spring-framework-3.0.5.RELEASE'/>
                <resource name='spring-core-3.0.5.RELEASE.jar' notice='spring-framework-3.0.5.RELEASE'/>
                <resource name='spring-expression-3.0.5.RELEASE.jar' notice='spring-framework-3.0.5.RELEASE'/>
                <resource name='spring-jdbc-3.0.5.RELEASE.jar' notice='spring-framework-3.0.5.RELEASE'/>
                <resource name='spring-jms-3.0.5.RELEASE.jar' notice='spring-framework-3.0.5.RELEASE'/>
                <resource name='spring-orm-3.0.5.RELEASE.jar' notice='spring-framework-3.0.5.RELEASE'/>
                <resource name='spring-tx-3.0.5.RELEASE.jar' notice='spring-framework-3.0.5.RELEASE'/>
                <resource name='spring-web-3.0.5.RELEASE.jar' notice='spring-framework-3.0.5.RELEASE'/>
            </by-organisation>
            <by-organisation id='Boilerpipe'>
                <resource name='boilerpipe-1.1.0.jar'/>
            </by-organisation>
            <by-organisation id='person:John.Cowan'>
                <resource name='tagsoup-1.2.jar'/>
            </by-organisation>
        </with-license>
        <with-license
            id='BSD3ClauseGeneric'>
            <copyright-notice>
ASM: a very small and fast Java bytecode manipulation framework
Copyright (c) 2000-2007 INRIA, France Telecom
All rights reserved.
            </copyright-notice>
            <by-organisation id='OW2'>
                <resource name='asm-3.1.jar'/>
            </by-organisation>
        </with-license>
        <with-license
            id='BouncyCastleLicense'>
            <copyright-notice>
            Copyright (c) 2000 - 2011 The Legion Of The Bouncy Castle (http://www.bouncycastle.org)
            </copyright-notice>
            <by-organisation id='TheLegionoftheBouncyCastle'>
                <resource name='bcmail-jdk15-1.45.jar'/>
                <resource name='bcprov-jdk15-1.45.jar'/>
            </by-organisation>
        </with-license>
        <with-license id='BSD3Clause'>
            <copyright-notice>
dnsjava is placed under the BSD license.  Several files are also under
additional licenses; see the individual files for details.

Copyright (c) 1999-2005, Brian Wellington
All rights reserved.
            </copyright-notice>
            <license-parameters>
                <parameter>
                    <name>organisation</name>
                    <value>the dnsjava project</value>
                </parameter>
            </license-parameters>
            <by-organisation id='person:Brian.Wellington'>
                <resource name='dnsjava-2.1.1.jar'/>
            </by-organisation>
        </with-license>
        <with-license id='BSD3Clause'>
            <copyright-notice>
Copyright (c) 2002-2007, A. Abram White
All rights reserved.
            </copyright-notice>
            <license-parameters>
                <parameter>
                    <name>organisation</name>
                    <value>'serp'</value>
                </parameter>
            </license-parameters>
            <by-organisation id='serp.sourceforge.net'>
                <resource name='serp-1.13.1.jar'/>
            </by-organisation>
        </with-license>
    </within>
</manifest>
+------------------------------------------------------------------------+
