diff --git a/self-extractors/nxp/COPYRIGHT b/self-extractors/nxp/COPYRIGHT
index b2e86b3..446c4f7 100644
--- a/self-extractors/nxp/COPYRIGHT
+++ b/self-extractors/nxp/COPYRIGHT
@@ -1 +1 @@
-# (C) NXP Semiconductors Netherlands B.V. All Rights Reserved.
+# (C) NXP Semiconductors Netherlands B.V.
diff --git a/self-extractors/nxp/LICENSE b/self-extractors/nxp/LICENSE
index 2036bb3..277a2a8 100644
--- a/self-extractors/nxp/LICENSE
+++ b/self-extractors/nxp/LICENSE
@@ -1 +1,218 @@
-NXP LICENSE GOES HERE
+THIS DEVELOPER SOFTWARE LICENSE AGREEMENT (THE "AGREEMENT") IS A LEGALLY
+BINDING AGREEMENT BETWEEN NXP Semiconductors Netherlands B.V ("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 the device
+          known as the Galaxy Nexus only.
+          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.
