THIS DEVELOPER SOFTWARE LICENSE AGREEMENT (THE "AGREEMENT") IS A LEGALLY
BINDING AGREEMENT BETWEEN Invensense, Inc. ("LICENSOR") AND
YOU OR THE LEGAL ENTITY YOU REPRESENT ("You" or its possessive, "Your"). BY
TYPING "I ACCEPT" WHERE INDICATED YOU ACKNOWLEDGE THAT YOU HAVE READ THIS
AGREEMENT, UNDERSTAND IT AND AGREE TO BE BOUND BY ITS TERMS AND CONDITIONS. IF
YOU DO NOT AGREE TO THESE TERMS YOU MUST DISCONTINUE THE INSTALLATION PROCESS
AND YOU SHALL NOT USE THE SOFTWARE OR RETAIN ANY COPIES OF THE SOFTWARE OR
DOCUMENTATION. ANY USE OR POSSESSION OF THE SOFTWARE BY YOU IS SUBJECT TO THE
TERMS AND CONDITIONS SET FORTH IN THIS AGREEMENT. IF THE SOFTWARE IS INSTALLED
ON A COMPUTER OWNED BY A CORPORATION OR OTHER LEGAL ENTITY, THEN YOU REPRESENT
AND WARRANT THAT YOU HAVE THE AUTHORITY TO BIND SUCH ENTITY TO THE TERMS AND
CONDITIONS OF THIS AGREEMENT.

   1.  Special Definitions

      a.  The term "Android" means the open source mobile platform, software
          stack, operating system, middleware, application programming
          interfaces and mobile applications under the trade-name "Android"
          distributed at Android.com.

      b.  The term "Android Applications" means a software application or
          open-source contribution developed by You, designed to operate with
          Android that does not contain or incorporate any of the Software.

      c.  The term "Authorized Android Enabled Device" means only the device
          identified on the site from which You downloaded the Software.
          The term "Software" means the Licensor's proprietary software and
          libraries in object code form, designed for use on the Authorized
          Android Enabled Device.

      d.  The term "Authorized Android Enabled Device Software" means a
          packaged build for Authorized Android Enabled Devices, consisting of
          files suitable for installation on an Authorized Android Enabled
          Device using a mechanism such as fastboot mode or recovery mode.

   2.  License Grant

      a.  Subject to the terms of this Agreement, Licensor hereby grants to
          You, free of charge, a non-exclusive, non-sublicensable,
          non-transferable, limited license, during the term of this Agreement,
          to download, install and use the Software internally in
          machine-readable (i.e., object code) form and the Documentation for
          non-commercial use on an Authorized Android Enabled Device and
          non-commercial redistribution of the Authorized Android Enabled
          Device Software (the "Limited Purpose"). You may grant your end users
          the right to use the Software for the Limited Purpose. The license to
          the Software granted to You hereunder is solely for the Limited
          Purpose set forth in this section, and the Software shall not be used
          for any other purpose.

   3.  Restrictions

      a.  Retention of Rights. The entire right, title and interest in the
          Software shall remain with Licensor and, unless specified in writing
          hereunder, no rights are granted to any of the Software. Except for
          the right to use the Software for the Limited Purpose, the delivery
          of the Software to You does not convey to You any intellectual
          property rights in the Software, including, but not limited to any
          rights under any patent, trademark, copyright, or trade secret.
          Neither the delivery of the Software to You nor any terms set forth
          herein shall be construed to grant to You, either expressly, by
          implication or by way of estoppel, any license under any patents or
          other intellectual property rights covering or relating to any other
          product or invention or any combination of the Software with any
          other product. Any rights not expressly granted to You herein are
          reserved by Licensor.

      b.  No Commercialization or Distribution of the Software and
          Documentation. Except as expressly provided in Section 2 of this
          Agreement, You shall have no right to (i) copy, disclose, distribute,
          publically perform, publically display, transfer, alter, modify,
          translate, disassemble, decompile, reverse engineer, or adapt the
          Software and Documentation, or any portion thereof, or create any
          derivative works based thereon; (ii) rent, lease, assign, sublicense,
          resell, disclose or otherwise transfer the Software and Documentation
          in whole or in part to any third party (iii) use the Software and
          Documentation except for the Limited Purpose, (iv) remove or alter
          any of the copyright or proprietary notices contained in any of the
          Software and Documentation. For the purposes of clarity, nothing in
          this Agreement prohibits You from making and distributing Android
          Applications under commercial or non-commercial terms, provided that
          You shall not contain, incorporate, and/or compile the Software or
          any of its derivative works, in whole or in part, into Your Android
          Applications and/or any software/devices created by You or by third
          parties acting on Your behalf. You and any such third party shall
          comply with all of the terms and conditions of this Agreement.

      c.  No Reverse Engineering. Except for any portions of the Software
          provided to You in source code format and except for any third party
          code distributed with the Software that is licensed under contrary
          terms, You will not reverse engineer, disassemble,
          decompile, or translate the Software, or otherwise attempt to derive
          the source code version of the Software, except if and to the extent
          expressly permitted under any applicable law.

      d.  Third Party Software. You agree that Android may contain third party
          software. You agree that you may not distribute such third party
          software for any purpose without appropriate licenses from the
          applicable third party or parties.

      e.  No Transfer or Assignment. You shall not assign any of its rights or
          obligations under this Agreement. Any attempted assignment in
          contravention of this Section shall be void.

   4.  Indemnity

      a.  You agree to indemnify and hold harmless Licensor and its officers,
          directors, customers, employees and successors and assigns (each an
          "Indemnified Party") against any and all claims, demands, causes of
          action, losses, liabilities, damages, costs and expenses, incurred by
          the Indemnified Party (including but not limited to costs of defense,
          investigation and reasonable attorney's fees) arising out of,
          resulting from or related to (i) any software, products,
          documentation, content, materials or derivative works created or
          developed by You using the Software which causes an infringement of
          any patent, copyright, trademark, trade secret, or other property,
          publicity or privacy rights of any third parties arising in any
          jurisdiction anywhere in the world, (ii) the download, distribution,
          installation, storage, execution, use or transfer of such software,
          products, documentation, content, materials or derivative works by
          any person or entity, and/or (iii) any breach of this Agreement by
          You. If requested by an Indemnified Party, You agree to defend such
          Indemnified Party in connection with any third party claims, demands,
          or causes of action resulting from, arising out of or in connection
          with any of the foregoing.

   5.  Limitation of Liability

      a.  TO THE MAXIMUM EXTENT PERMITTED UNDER APPLICABLE LAWS, UNDER NO
          CIRCUMSTANCES, INCLUDING WITHOUT LIMITATION NEGLIGENCE, SHALL
          LICENSOR, ITS AFFILIATES AND/OR ITS DIRECTORS, OFFICERS, EMPLOYEES OR
          AGENTS BE LIABLE FOR ANY INDIRECT, INCIDENTAL, SPECIAL, PUNITIVE OR
          CONSEQUENTIAL DAMAGES (INCLUDING BUT NOT LIMITED TO DAMAGES FOR LOSS
          OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS
          INFORMATION AND THE LIKE) ARISING OUT OF OR IN CONNECTION WITH THE
          SOFTWARE OR ANY DOWNLOAD, INSTALLATION OR USE OF, OR INABILITY TO
          USE, THE SOFTWARE, EVEN IF LICENSOR HAS BEEN ADVISED OF THE
          POSSIBILITY OF SUCH DAMAGES. SOME JURISDICTIONS DO NOT ALLOW THE
          LIMITATION OR EXCLUSION OF LIABILITY FOR INCIDENTAL OR CONSEQUENTIAL
          DAMAGES SO THE ABOVE LIMITATION OR EXCLUSION MAY NOT APPLY OR MAY BE
          LIMITED. IN NO EVENT SHALL LICENSOR'S TOTAL AGGREGATE LIABILITY TO
          YOU FOR ANY AND ALL DAMAGES, LOSSES, CLAIMS AND CAUSES OF ACTIONS
          (WHETHER IN CONTRACT, TORT, INCLUDING NEGLIGENCE, INDEMNIFICATION OR
          OTHERWISE) EXCEED ONE HUNDRED U.S. DOLLARS (US$100). THE LIMITATIONS
          SET FORTH IN THIS PARAGRAPH SHALL BE DEEMED TO APPLY TO THE MAXIMUM
          EXTENT PERMITTED BY APPLICABLE LAW. THE PARTIES HAVE FULLY CONSIDERED
          THE FOREGOING ALLOCATION OF RISK AND FIND IT REASONABLE, AND THAT THE
          FOREGOING LIMITATIONS IN THIS PARAGRAPH ARE AN ESSENTIAL BASIS OF
          THE BARGAIN BETWEEN THE PARTIES.

   6.  No Warranty

      a.  LICENSOR MAKES NO WARRANTIES, EXPRESS OR IMPLIED, WITH RESPECT TO THE
          SOFTWARE AND DOCUMENTATION PROVIDED UNDER THIS AGREEMENT, INCLUDING
          BUT NOT LIMITED TO ANY WARRANTY OF MERCHANTABILITY OR FITNESS FOR A
          PARTICULAR PURPOSE OR AGAINST INFRINGEMENT, OR ANY EXPRESS OR IMPLIED
          WARRANTY ARISING OUT OF TRADE USAGE OR OUT OF A COURSE OF DEALING OR
          COURSE OF PERFORMANCE. NOTHING CONTAINED IN THIS AGREEMENT SHALL BE
          CONSTRUED AS A WARRANTY OR REPRESENTATION BY LICENSOR (I) AS TO THE
          VALIDITY OR SCOPE OF ANY PATENT, COPYRIGHT OR OTHER INTELLECTUAL
          PROPERTY RIGHT AND (II) THAT ANY MANUFACTURE OR USE WILL BE FREE FROM
          INFRINGEMENT OF PATENTS, COPYRIGHTS OR OTHER INTELLECTUAL PROPERTY
          RIGHTS OF OTHERS, AND IT SHALL BE THE SOLE RESPONSIBILITY OF YOU TO
          MAKE SUCH DETERMINATION AS IS NECESSARY WITH RESPECT TO THE
          ACQUISITION OF LICENSES UNDER PATENTS AND OTHER INTELLECTUAL PROPERTY
          OF THIRD PARTIES. LICENSOR SHALL NOT HAVE ANY OBLIGATION TO PROVIDE
          ANY TECHNICAL SUPPORT OF THE SOFTWARE UNDER THIS AGREEMENT.

   7.  Term and Termination

      a.  This Agreement shall be effective on the date You accept this
          Agreement and shall remain in effect until terminated as provided
          herein. You may terminate the Agreement at any time by deleting and
          destroying all copies of the Software and all related information in
          Your possession or control. This Agreement terminates immediately and
          automatically, with or without notice, if You fail to comply with any
          provision hereof.  Additionally, Licensor may at any time terminate
          this Agreement, without cause, upon notice to You. Upon termination
          You must delete or destroy all copies of the Software in Your
          possession, and the license granted to You in this Agreement shall
          terminate. Sections 3, 4, 5, 6 and 8 shall survive the termination of
          this Agreement.

   8.  Miscellaneous

      a.  Governing Law. This Agreement is governed and interpreted in
          accordance with the laws of the State of California without giving
          effect to its conflict of laws provisions. The United Nations
          Convention on Contracts for the International Sale of Goods is
          expressly disclaimed and shall not apply. Any claim arising out of or
          related to this Agreement must be brought exclusively in a federal or
          state court located in Santa Clara County, California and You consent
          to the jurisdiction and venue of such courts.

      b.  Waiver and Severability. The failure of either party to require
          performance by the other party of any provision of this Agreement
          shall not affect the full right to require such performance at any
          time thereafter; nor shall the waiver by either party of a breach of
          any provision of this Agreement be taken or held to be a waiver of
          the provision itself. Severability. If any provision of this
          Agreement is unenforceable or invalid under any applicable law or is
          so held by applicable court decision, such unenforceability or
          invalidity shall not render this Agreement unenforceable or invalid
          as a whole, and such provision shall be changed and interpreted so as
          to best accomplish the objectives of such unenforceable or invalid
          provision within the limits of applicable law or applicable court
          decisions.

      c.  Amendment and Modification. This Agreement and any of its terms and
          provisions may only be amended, modified, supplemented or waived in a
          writing signed by both parties hereto.

      d.  Compliance with Laws. You shall comply with all applicable laws,
          rules, and regulations in connection with its activities under this
          Agreement.

      e.  Entire Agreement. This Agreement completely and exclusively states
          the agreement between You and Licensor regarding this subject matter.
