This product includes DNG technology under license by Adobe Systems
Incorporated.

DNG SDK License Agreement
NOTICE TO USER:
Adobe Systems Incorporated provides the Software and Documentation for use under
the terms of this Agreement. Any download, installation, use, reproduction,
modification or distribution of the Software or Documentation, or any
derivatives or portions thereof, constitutes your acceptance of this Agreement.

As used in this Agreement, "Adobe" means Adobe Systems Incorporated. "Software"
means the software code, in any format, including sample code and source code,
accompanying this Agreement. "Documentation" means the documents, specifications
and all other items accompanying this Agreement other than the Software.

1. LICENSE GRANT
Software License.  Subject to the restrictions below and other terms of this
Agreement, Adobe hereby grants you a non-exclusive, worldwide, royalty free
license to use, reproduce, prepare derivative works from, publicly display,
publicly perform, distribute and sublicense the Software for any purpose.

Document License.  Subject to the terms of this Agreement, Adobe hereby grants
you a non-exclusive, worldwide, royalty free license to make a limited number of
copies of the Documentation for your development purposes and to publicly
display, publicly perform and distribute such copies.  You may not modify the
Documentation.

2. RESTRICTIONS AND OWNERSHIP
You will not remove any copyright or other notice included in the Software or
Documentation and you will include such notices in any copies of the Software
that you distribute in human-readable format.

You will not copy, use, display, modify or distribute the Software or
Documentation in any manner not permitted by this Agreement. No title to the
intellectual property in the Software or Documentation is transferred to you
under the terms of this Agreement. You do not acquire any rights to the Software
or the Documentation except as expressly set forth in this Agreement. All rights
not granted are reserved by Adobe.

3. DISCLAIMER OF WARRANTY
ADOBE PROVIDES THE SOFTWARE AND DOCUMENTATION ONLY 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. ADOBE MAKES NO WARRANTY
THAT THE SOFTWARE OR DOCUMENTATION WILL BE ERROR-FREE. To the extent
permissible, any warranties that are not and cannot be excluded by the foregoing
are limited to ninety (90) days.

4. LIMITATION OF LIABILITY
ADOBE AND ITS SUPPLIERS SHALL NOT BE LIABLE FOR LOSS OR DAMAGE ARISING OUT OF
THIS AGREEMENT OR FROM THE USE OF THE SOFTWARE OR DOCUMENTATION. IN NO EVENT
WILL ADOBE BE LIABLE TO YOU OR ANY THIRD PARTY FOR ANY DIRECT, INDIRECT,
CONSEQUENTIAL, INCIDENTAL, OR SPECIAL DAMAGES INCLUDING LOST PROFITS, LOST
SAVINGS, COSTS, FEES, OR EXPENSES OF ANY KIND ARISING OUT OF ANY PROVISION OF
THIS AGREEMENT OR THE USE OR THE INABILITY TO USE THE SOFTWARE OR DOCUMENTATION,
HOWEVER CAUSED AND UNDER ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE), EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES. ADOBE'S AGGREGATE LIABILITY AND THAT OF ITS
SUPPLIERS UNDER OR IN CONNECTION WITH THIS AGREEMENT SHALL BE LIMITED TO THE
AMOUNT PAID BY YOU FOR THE SOFTWARE AND DOCUMENTATION.

5. INDEMNIFICATION
If you choose to distribute the Software in a commercial product, you do so with
the understanding that you agree to defend, indemnify and hold harmless Adobe
against any losses, damages and costs arising from the claims, lawsuits or other
legal actions arising out of such distribution.

6. TRADEMARK USAGE
Adobe and the DNG logo are the trademarks or registered trademarks of Adobe
Systems Incorporated in the United States and other countries. Such trademarks
may not be used to endorse or promote any product unless expressly permitted
under separate agreement with Adobe. For information on how to license the DNG
logo please go to www.adobe.com.

7. TERM
Your rights under this Agreement shall terminate if you fail to comply with any
of the material terms or conditions of this Agreement. If all your rights under
this Agreement terminate, you will immediately cease use and distribution of the
Software and Documentation.

8. GOVERNING LAW AND JURISDICTION. This Agreement is governed by the statutes
and laws of the State of California, without regard to the conflicts of law
principles thereof. The federal and state courts located in Santa Clara County,
California, USA, will have non-exclusive jurisdiction over any dispute arising
out of this Agreement.

9. GENERAL
This Agreement supersedes any prior agreement, oral or written, between Adobe
and you with respect to the licensing to you of the Software and Documentation.
No variation of the terms of this Agreement will be enforceable against Adobe
unless Adobe gives its express consent in writing signed by an authorized
signatory of Adobe. If any part of this Agreement is found void and
unenforceable, it will not affect the validity of the balance of the Agreement,
which shall remain valid and enforceable according to its terms.
