THIS END USER LICENCE AGREEMENT ("LICENCE") IS A LEGAL AGREEMENT
BETWEEN YOU (EITHER A SINGLE INDIVIDUAL, OR SINGLE LEGAL ENTITY) AND
ARM LIMITED ("ARM") FOR THE USE OF THE SOFTWARE ACCOMPANYING THIS
LICENCE. ARM IS ONLY WILLING TO LICENSE THE SOFTWARE TO YOU ON
CONDITION THAT YOU ACCEPT ALL OF THE TERMS IN THIS LICENCE. BY
CLICKING "I AGREE" OR BY INSTALLING OR OTHERWISE USING OR COPYING THE
SOFTWARE YOU INDICATE THAT YOU AGREE TO BE BOUND BY ALL OF THE TERMS
OF THIS LICENCE. IF YOU DO NOT AGREE TO THE TERMS OF THIS LICENCE, ARM
IS UNWILLING TO LICENSE THE SOFTWARE TO YOU AND YOU MAY NOT INSTALL,
USE OR COPY THE SOFTWARE, AND YOU SHOULD PROMPTLY RETURN THE SOFTWARE
TO YOUR SUPPLIER.

"Software" means any software, firmware and data accompanying this
Licence, any printed, electronic or online documentation supplied with
it under the terms of this Licence for the MALI GPU Driver.

  1. LICENCE GRANTS TO YOU.

  1.1 ARM hereby grants to you, subject to the terms and conditions of
  this Licence, a non-exclusive, non-transferable, revocable, worldwide
  licence to: (i) use the Software or certain components or optional
  functionality in the Software, as applicable, solely for the purposes
  of designing or developing applications for use in conjunction with
  MALI GPU based products manufactured under licence from ARM; and (ii)
  modify the Software or certain components or optional functionality in
  the Software for the purposes of porting the Software to your target;

  2. RESTRICTIONS ON USE OF THE SOFTWARE.

  COPYING: You shall not use or copy the Software except as expressly
  authorised in this Licence. You may make one additional copy of the
  delivered Software for backup or archival purposes.

  BENCHMARKING: This Licence does not prevent you from using the
  Software for internal benchmarking purposes. However, you shall treat
  any and all benchmarking data relating to the Software, and any other
  results of your use or testing of the Software which are indicative of
  its performance, efficacy, reliability or quality, as confidential
  information and you shall not disclose such information to any third
  party without the express written permission of ARM.

  COPYRIGHT AND RESERVATION OF RIGHTS: The Software is owned by ARM or
  its licensors and is protected by copyright and other intellectual
  property laws and international treaties. The Software is licensed not
  sold. You acquire no rights to the Software other than as expressly
  provided by this Licence. You shall not remove from the Software any
  copyright notice or other notice and shall ensure that any such notice
  is reproduced in any copies of the whole or any part of the Software
  made by you or other permitted users.

  REVERSE ENGINEERING: Except to the extent that such activity is
  permitted by applicable law you shall not reverse engineer, decompile
  or disassemble any of the Software. If the Software was provided to
  you in Europe you shall not reverse engineer, decompile or disassemble
  any of the Software for the purposes of error correction.

  3. SUPPORT.

  ARM is not under an obligation to provide support, but it may do so at
  its own discretion, and if it does, it will only be in respect of the
  Software as delivered and not any modifications thereto.

  4. NO WARRANTIES.

  YOU AGREE THAT THE SOFTWARE IS LICENSED "AS IS", AND THAT ARM
  EXPRESSLY DISCLAIMS ALL REPRESENTATIONS, WARRANTIES, CONDITIONS OR
  OTHER TERMS, EXPRESS OR IMPLIED OR STATUTORY, INCLUDING WITHOUT
  LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, SATISFACTORY
  QUALITY, AND FITNESS FOR A PARTICULAR PURPOSE.

  YOU EXPRESSLY ASSUME ALL LIABILITIES AND RISKS, FOR USE OR OPERATION
  OF SOFTWARE APPLICATIONS, INCLUDING WITHOUT LIMITATION, SOFTWARE
  APPLICATIONS DESIGNED OR INTENDED FOR MISSION CRITICAL APPLICATIONS,
  SUCH AS PACEMAKERS, WEAPONRY, AIRCRAFT NAVIGATION, FACTORY CONTROL
  SYSTEMS, ETC. SHOULD THE SOFTWARE PROVE DEFECTIVE, YOU ASSUME THE
  ENTIRE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  5. LIMITATION OF LIABILITY.

  TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT SHALL
  ARM BE LIABLE FOR ANY INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL
  DAMAGES (INCLUDING LOSS OF PROFITS) ARISING OUT OF THE USE OR
  INABILITY TO USE THE SOFTWARE WHETHER BASED ON A CLAIM UNDER CONTRACT,
  TORT OR OTHER LEGAL THEORY, EVEN IF ARM WAS ADVISED OF THE POSSIBILITY
  OF SUCH DAMAGES.

  ARM does not seek to limit or exclude liability for death or personal
  injury arising from ARM's negligence or ARM's fraud and because some
  jurisdictions do not permit the exclusion or limitation of liability
  for consequential or incidental damages the above limitation relating
  to liability for consequential damages may not apply to you.

  NOTWITHSTANDING ANYTHING TO THE CONTRARY CONTAINED IN THIS LICENCE,
  THE MAXIMUM LIABILITY OF ARM TO YOU IN AGGREGATE FOR ALL CLAIMS MADE
  AGAINST ARM IN CONTRACT TORT OR OTHERWISE UNDER OR IN CONNECTION WITH
  THE SUBJECT MATTER OF THIS LICENCE SHALL NOT EXCEED THE GREATER OF:
  (I) THE TOTAL OF SUMS PAID BY YOU TO ARM (IF ANY) FOR THIS LICENCE;
  AND (II) $10.00 USD. THE EXISTENCE OF MORE THAN ONE CLAIM WILL NOT
  ENLARGE OR EXTEND THE LIMIT.

  6. CONFIDENTIALITY.

  You acknowledge that the Software and any benchmarking data and
  related information mentioned in Clause 2 may contain trade secrets
  and confidential material and you agree to maintain all such
  information in confidence and apply security measures no less
  stringent than the measures which you apply to protect your own like
  information, but not less than a reasonable degree of care, to prevent
  their unauthorised disclosure and use. Subject to any restrictions
  imposed by applicable law, the period of confidentiality shall be
  indefinite. You agree not to use any such information other than in
  normal use of the Software under the licences granted in this Licence.

  7. U.S. GOVERNMENT END USERS.

  US Government Restrictions: Use, duplication, reproduction, release,
  modification, disclosure or transfer of the Software is restricted in
  accordance with the terms of this Licence.

  8. TERM AND TERMINATION.

  This Licence shall remain in force until terminated by you or by
  ARM. Without prejudice to any of its other rights if you are in breach
  of any of the terms and conditions of this Licence then ARM may
  terminate this Licence immediately upon giving written notice to you
  or on thirty (30) days written notice without cause. You may terminate
  this Licence at any time. Upon termination of this Licence by you or
  by ARM , you shall stop using the Software and confidential
  information and destroy all copies of the Software and confidential
  information in your possession, together with all documentation and
  related materials. The provisions of clauses 4, 5, 6, 7, 8 and 9 shall
  survive termination of this Licence.

  9. GENERAL.

  This Licence is governed by English Law. Except where ARM agrees
  otherwise in: (i) a written contract signed by you and ARM; or (ii) a
  written contract provided by ARM and accepted by you, this is the only
  agreement between you and ARM relating to the Software and it may only
  be modified by written agreement between you and ARM. Except as
  expressly agreed in writing, this Licence may not be modified by
  purchase orders, advertising or other representation by any person. If
  any clause or sentence in this Licence is held by a court of law to be
  illegal or unenforceable the remaining provisions of this Licence
  shall not be affected thereby. The failure by ARM to enforce any of
  the provisions of this Licence, unless waived in writing, shall not
  constitute a waiver of ARM's rights to enforce such provision or any
  other provision of this Licence in the future.

  At ARM's request, you agree to check your computers for installations
  of the Software and any other information requested by ARM relating to
  Software installation and to provide this information to ARM. You
  agree that auditors nominated by ARM may also perform such checking
  and reporting on behalf of ARM by prior appointment during your normal
  business hours on seven (7) days' notice. ARM shall bear the auditors'
  costs for that audit unless it reveals unlicensed usage in which case
  you shall promptly reimburse ARM for all reasonable costs and
  expenses, including professional fees, relating to such audit. Any
  information which is disclosed to ARM or such auditors during checking
  or audit shall be treated as your confidential information and shall
  only be used by ARM for licence management, compliance and enforcement
  purposes.

  The Software provided under this Licence is subject to U.S. export
  control laws, including the U.S. Export Administration Act and its
  associated regulations, and may be subject to export or import
  regulations in other countries. You agree to comply fully with all
  laws and regulations of the United States and other countries ("Export
  Laws") to assure that the Software, is not (1) exported, directly or
  indirectly, in violation of Export Laws, either to any countries that
  are subject to U.S.A. export restrictions or to any end user who has
  been prohibited from participating in the U.S.A. export transactions
  by any federal agency of the U.S.A. government; or (2) intended to be
  used for any purpose prohibited by Export Laws, including, without
  limitation, nuclear, chemical, or biological weapons proliferation.

Mali GPU Userspace LES-PRE-20376
