   [1][Unicode]   [2]Terms of Use [3]Home | [4]Site Map | [5]Search

   Contents
   [6]Unicode Copyright
   [7]Restricted Rights Legend
   [8]Warranties & Disclaimers
   [9]Waiver of Damages
   [10]Trademarks
   [11]Miscellaneous
   [12]Data Files and Software License Agreement (Exhibit 1)

   Related Links
   [13]The Unicode® Consortium Trademarks and Logo Policy
   [14]Unicode Policies

Unicode Terms of Use

     For the general privacy policy governing access to this site, see
     the  [15]Unicode Privacy Policy. For trademark usage, see [16]the
     Unicode Consortium® Trademarks and Logo Policy.

                                         Notice to End User: Terms of Use
        Carefully read the following legal agreement ("Agreement"). Use or
    copying of the software and/or codes provided with this agreement (The
                    "Software") constitutes your acceptance of these terms

    A. Unicode Copyright.
         1. Copyright © 1991-2008 Unicode, Inc. All rights reserved.
         2. Certain documents and files on this website contain a legend
            indicating that "Modification is permitted." Any person is
            hereby authorized, without fee, to modify such documents and
            files to create derivative works conforming to the Unicode®
            Standard, subject to Terms and Conditions herein.
         3. Any person is hereby authorized, without fee, to view, use,
            reproduce, and distribute all documents and files solely for
            informational purposes in the creation of products supporting
            the Unicode Standard, subject to the Terms and Conditions
            herein.
         4. Further specifications of rights and restrictions pertaining
            to the use of the particular set of data files known as the
            "Unicode Character Database" can be found in [17]Exhibit 1.
         5. Each version of the Unicode Standard has further
            specifications of rights and restrictions of use. For the book
            editions, these are found on the back of the [18]title page.
            For the online edition, certain files (such as the PDF files
            for book chapters and code charts) carry specific
            restrictions. All other files are covered under these general
            Terms of Use.  To request a permission to reproduce any part
            of the Unicode Standard, please [19]contact the Unicode
            Consortium.
         6. No license is granted to "mirror" the Unicode website where a
            fee is charged for access to the "mirror" site.
         7. Modification is not permitted with respect to this document.
            All copies of this document must be verbatim.
    B. Restricted Rights Legend. Any technical data or software which is
       licensed to the United States of America, its agencies and/or
       instrumentalities under this Agreement is commercial technical data
       or commercial computer software developed exclusively at private
       expense as defined in FAR 2.101, or DFARS 252.227-7014 (June 1995),
       as applicable. For technical data, use, duplication, or disclosure
       by the Government is subject to restrictions as set forth in DFARS
       202.227-7015 Technical Data, Commercial and Items (Nov 1995) and
       this Agreement. For Software, in accordance with FAR 12-212 or
       DFARS 227-7202, as applicable, use, duplication or disclosure by
       the Government is subject to the restrictions set forth in this
       Agreement.
    C. Warranties and Disclaimers.
         1. This publication and/or website may include technical or
            typographical errors or other inaccuracies . Changes are
            periodically added to the information herein; these changes
            will be incorporated in new editions of the publication and/or
            website. Unicode may make improvements and/or changes in the
            product(s) and/or program(s) described in this publication
            and/or website at any time.
         2. If this file has been purchased on magnetic or optical media
            from Unicode, Inc. the sole and exclusive remedy for any claim
            will be exchange of the defective media within ninety (90)
            days of original purchase.
         3. EXCEPT AS PROVIDED IN SECTION C.2, THIS PUBLICATION AND/OR
            SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND
            EITHER EXPRESS, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT
            LIMITED TO, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
            PARTICULAR PURPOSE, OR NON-INFRINGEMENT. UNICODE AND ITS
            LICENSORS ASSUME NO RESPONSIBILITY FOR ERRORS OR OMISSIONS IN
            THIS PUBLICATION AND/OR SOFTWARE OR OTHER DOCUMENTS WHICH ARE
            REFERENCED BY OR LINKED TO THIS PUBLICATION OR THE UNICODE
            WEBSITE.
    D. Waiver of Damages. In no event shall Unicode or its licensors be
       liable for any special, incidental, indirect or consequential
       damages of any kind, or any damages whatsoever, whether or not
       Unicode was advised of the possibility of the damage, including,
       without limitation, those resulting from the following: loss of
       use, data or profits, in connection with the use, modification or
       distribution of this information or its derivatives.
    E. Trademarks.
         1. Unicode and the Unicode logo are registered trademarks of
            Unicode, Inc.
         2. This site contains product names and corporate names of other
            companies. All product names and company names and logos
            mentioned herein are the trademarks or registered trademarks
            of their respective owners. Other products and corporate names
            mentioned herein which are trademarks of a third party are
            used only for explanation and for the owners' benefit and with
            no intent to infringe.
         3. Use of third party products or information referred to herein
            is at the user's risk.
    F. Miscellaneous.
         1. Jurisdiction and Venue. This server is operated from a
            location in the State of California, United States of America.
            Unicode makes no representation that the materials are
            appropriate for use in other locations. If you access this
            server from other locations, you are responsible for
            compliance with local laws. This Agreement, all use of this
            site and any claims and damages resulting from use of this
            site are governed solely by the laws of the State of
            California without regard to any principles which would apply
            the laws of a different jurisdiction. The user agrees that any
            disputes regarding this site shall be resolved solely in the
            courts located in Santa Clara County, California. The user
            agrees said courts have personal jurisdiction and agree to
            waive any right to transfer the dispute to any other forum.
         2. Modification by Unicode Unicode shall have the right to modify
            this Agreement at any time by posting it to this site. The
            user may not assign any part of this Agreement without
            Unicode's prior written consent.
         3. Taxes. The user agrees to pay any taxes arising from access to
            this website or use of the information herein, except for
            those based on Unicode's net income.
         4. Severability.  If any provision of this Agreement is declared
            invalid or unenforceable, the remaining provisions of this
            Agreement shall remain in effect.
         5. Entire Agreement. This Agreement constitutes the entire
            agreement between the parties.
     ___________________________________________________________________

                                  EXHIBIT 1
          UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE

     Unicode Data Files include all data files under the directories
     [20]http://www.unicode.org/Public/,
     [21]http://www.unicode.org/reports/, and
     [22]http://www.unicode.org/cldr/data/ . Unicode Software includes
     any source code published in the Unicode Standard or under the
     directories [23]http://www.unicode.org/Public/,
     [24]http://www.unicode.org/reports/, and
     [25]http://www.unicode.org/cldr/data/.

     NOTICE TO USER: Carefully read the following legal agreement. BY
     DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S
     DATA FILES ("DATA FILES"), AND/OR SOFTWARE ("SOFTWARE"), YOU
     UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE TERMS AND
     CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT DOWNLOAD,
     INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE.

     COPYRIGHT AND PERMISSION NOTICE

     Copyright © 1991-2007 Unicode, Inc. All rights reserved. Distributed
     under the Terms of Use in [26]http://www.unicode.org/copyright.html.

     Permission is hereby granted, free of charge, to any person
     obtaining a copy of the Unicode data files and any associated
     documentation (the "Data Files") or Unicode software and any
     associated documentation (the "Software") to deal in the Data Files
     or Software without restriction, including without limitation the
     rights to use, copy, modify, merge, publish, distribute, and/or sell
     copies of the Data Files or Software, and to permit persons to whom
     the Data Files or Software are furnished to do so, provided that (a)
     the above copyright notice(s) and this permission notice appear with
     all copies of the Data Files or Software, (b) both the above
     copyright notice(s) and this permission notice appear in associated
     documentation, and (c) there is clear notice in each modified Data
     File or in the Software as well as in the documentation associated
     with the Data File(s) or Software that the data or software has been
     modified.

     THE DATA FILES AND SOFTWARE ARE 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 THE DATA FILES OR 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 these Data Files or Software without prior
     written authorization of the copyright holder.
            ______________________________________________________

     Unicode and the Unicode logo are trademarks of Unicode, Inc., and
     may be registered in some jurisdictions. All other trademarks and
     registered trademarks mentioned herein are the property of their
     respective owners.
                     ___________________________________

                  [27]Access to Copyright and terms of use

References

   1. http://www.unicode.org/
   2. http://www.unicode.org/copyright.html
   3. http://www.unicode.org/
   4. http://www.unicode.org/sitemap/
   5. http://www.unicode.org/search
   6. http://www.unicode.org/copyright.html#1
   7. http://www.unicode.org/copyright.html#2
   8. http://www.unicode.org/copyright.html#3
   9. http://www.unicode.org/copyright.html#4
  10. http://www.unicode.org/copyright.html#5
  11. http://www.unicode.org/copyright.html#7
  12. http://www.unicode.org/copyright.html#Exhibit1
  13. http://www.unicode.org/policies/logo_policy.html
  14. http://www.unicode.org/policies/policies.html
  15. http://www.unicode.org/policies/privacy_policy.html
  16. http://www.unicode.org/policies/logo_policy.html
  17. http://www.unicode.org/copyright.html#Exhibit1
  18. http://www.unicode.org/versions/Unicode5.0.0/Title.pdf
  19. http://www.unicode.org/contacts.html
  20. http://www.unicode.org/Public/
  21. http://www.unicode.org/reports/
  22. http://www.unicode.org/cldr/data/
  23. http://www.unicode.org/Public/
  24. http://www.unicode.org/reports/
  25. http://www.unicode.org/cldr/data/
  26. http://www.unicode.org/copyright.html
  27. http://www.unicode.org/copyright.html
