===========================================================
Notices for file(s):
./emulator
./emulator-check
./emulator-crash-service
./nimble_bridge
./qemu-img
./qemu/darwin-x86_64/qemu-system-aarch64
./qemu/darwin-x86_64/qemu-system-aarch64-headless
./qemu/darwin-x86_64/qemu-system-armel
./qemu/darwin-x86_64/qemu-system-armel-headless
./qemu/darwin-x86_64/qemu-system-i386
./qemu/darwin-x86_64/qemu-system-i386-headless
./qemu/darwin-x86_64/qemu-system-x86_64
./qemu/darwin-x86_64/qemu-system-x86_64-headless
./qsn
OpenglRender.dylib
android-curl.dylib
android-emu-agents.dylib
android-metrics.dylib
emugl_common.dylib
The notices is included for the library: lz4

===========================================================
This repository uses 2 different licenses :
- all files in the `lib` directory use a BSD 2-Clause license
- all other files use a GPLv2 license, unless explicitly stated otherwise

Relevant license is reminded at the top of each source file,
and with presence of COPYING or LICENSE file in associated directories.

This model is selected to emphasize that
files in the `lib` directory are designed to be included into 3rd party applications,
while all other files, in `programs`, `tests` or `examples`,
receive more limited attention and support for such scenario.


===========================================================
Notices for file(s):
./emulator-check
./emulator-crash-service
./nimble_bridge
./qemu-img
./qemu/darwin-x86_64/qemu-system-aarch64
./qemu/darwin-x86_64/qemu-system-aarch64-headless
./qemu/darwin-x86_64/qemu-system-armel
./qemu/darwin-x86_64/qemu-system-armel-headless
./qemu/darwin-x86_64/qemu-system-i386
./qemu/darwin-x86_64/qemu-system-i386-headless
./qemu/darwin-x86_64/qemu-system-x86_64
./qemu/darwin-x86_64/qemu-system-x86_64-headless
./qsn
OpenglRender.dylib
emugl_common.dylib
The notices is included for the library: libvpx

===========================================================
Copyright (c) 2010, The WebM Project authors. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

  * Redistributions of source code must retain the above copyright
    notice, this list of conditions and the following disclaimer.

  * Redistributions in binary form must reproduce the above copyright
    notice, this list of conditions and the following disclaimer in
    the documentation and/or other materials provided with the
    distribution.

  * Neither the name of Google, nor the WebM Project, nor the names
    of its contributors may be used to endorse or promote products
    derived from this software without specific prior written
    permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.



===========================================================
Notices for file(s):
./emulator-crash-service
./qemu/darwin-x86_64/qemu-system-aarch64
./qemu/darwin-x86_64/qemu-system-armel
./qemu/darwin-x86_64/qemu-system-i386
./qemu/darwin-x86_64/qemu-system-x86_64
The notices is included for the library: Qt Gui

===========================================================
Licensed under the GNU LIBRARY GENERAL PUBLIC LICENSE, Version 2 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    https://www.gnu.org/licenses/lgpl-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

===========================================================
Notices for file(s):
./emulator-crash-service
./qemu/darwin-x86_64/qemu-system-aarch64
./qemu/darwin-x86_64/qemu-system-armel
./qemu/darwin-x86_64/qemu-system-i386
./qemu/darwin-x86_64/qemu-system-x86_64
The notices is included for the library: Qt Core

===========================================================
Licensed under the GNU LIBRARY GENERAL PUBLIC LICENSE, Version 2 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    https://www.gnu.org/licenses/lgpl-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

===========================================================
Notices for file(s):
./emulator
./emulator-check
./emulator-crash-service
./nimble_bridge
./qemu-img
./qemu/darwin-x86_64/qemu-system-aarch64
./qemu/darwin-x86_64/qemu-system-aarch64-headless
./qemu/darwin-x86_64/qemu-system-armel
./qemu/darwin-x86_64/qemu-system-armel-headless
./qemu/darwin-x86_64/qemu-system-i386
./qemu/darwin-x86_64/qemu-system-i386-headless
./qemu/darwin-x86_64/qemu-system-x86_64
./qemu/darwin-x86_64/qemu-system-x86_64-headless
./qsn
OpenglRender.dylib
android-emu-agents.dylib
android-metrics.dylib
emugl_common.dylib
The notices is included for the library: ext4_utils

===========================================================
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.


===========================================================
Notices for file(s):
./emulator-check
./emulator-crash-service
./nimble_bridge
./qemu-img
./qemu/darwin-x86_64/qemu-system-aarch64
./qemu/darwin-x86_64/qemu-system-aarch64-headless
./qemu/darwin-x86_64/qemu-system-armel
./qemu/darwin-x86_64/qemu-system-armel-headless
./qemu/darwin-x86_64/qemu-system-i386
./qemu/darwin-x86_64/qemu-system-i386-headless
./qemu/darwin-x86_64/qemu-system-x86_64
./qemu/darwin-x86_64/qemu-system-x86_64-headless
./qsn
OpenglRender.dylib
emugl_common.dylib
The notices is included for the library: grpc

===========================================================
Copyright 2014 gRPC authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.


===========================================================
Notices for file(s):
./emulator-crash-service
./qemu/darwin-x86_64/qemu-system-aarch64
./qemu/darwin-x86_64/qemu-system-armel
./qemu/darwin-x86_64/qemu-system-i386
./qemu/darwin-x86_64/qemu-system-x86_64
The notices is included for the library: Qt WebChannel

===========================================================
Licensed under the GNU LIBRARY GENERAL PUBLIC LICENSE, Version 2 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    https://www.gnu.org/licenses/lgpl-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

===========================================================
Notices for file(s):
./emulator-check
./emulator-crash-service
./nimble_bridge
./qemu-img
./qemu/darwin-x86_64/qemu-system-aarch64
./qemu/darwin-x86_64/qemu-system-aarch64-headless
./qemu/darwin-x86_64/qemu-system-armel
./qemu/darwin-x86_64/qemu-system-armel-headless
./qemu/darwin-x86_64/qemu-system-i386
./qemu/darwin-x86_64/qemu-system-i386-headless
./qemu/darwin-x86_64/qemu-system-x86_64
./qemu/darwin-x86_64/qemu-system-x86_64-headless
./qsn
OpenglRender.dylib
emugl_common.dylib
The notices is included for the library: tinyobjloader

===========================================================
The MIT License (MIT)

Copyright (c) 2012-2016 Syoyo Fujita and many contributors.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS 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. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.


===========================================================
Notices for file(s):
./emulator-crash-service
./qemu/darwin-x86_64/qemu-system-aarch64
./qemu/darwin-x86_64/qemu-system-armel
./qemu/darwin-x86_64/qemu-system-i386
./qemu/darwin-x86_64/qemu-system-x86_64
The notices is included for the library: Qt Network

===========================================================
Licensed under the GNU LIBRARY GENERAL PUBLIC LICENSE, Version 2 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    https://www.gnu.org/licenses/lgpl-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

===========================================================
Notices for file(s):
./emulator-check
./emulator-crash-service
./nimble_bridge
./qemu-img
./qemu/darwin-x86_64/qemu-system-aarch64
./qemu/darwin-x86_64/qemu-system-aarch64-headless
./qemu/darwin-x86_64/qemu-system-armel
./qemu/darwin-x86_64/qemu-system-armel-headless
./qemu/darwin-x86_64/qemu-system-i386
./qemu/darwin-x86_64/qemu-system-i386-headless
./qemu/darwin-x86_64/qemu-system-x86_64
./qemu/darwin-x86_64/qemu-system-x86_64-headless
./qsn
OpenglRender.dylib
emugl_common.dylib
The notices is included for the library: libjpeg

===========================================================
This software is based in part on the work of the Independent JPEG Group.

----------------------

The authors make NO WARRANTY or representation, either express or implied,
with respect to this software, its quality, accuracy, merchantability, or
fitness for a particular purpose.  This software is provided "AS IS", and you,
its user, assume the entire risk as to its quality and accuracy.

This software is copyright (C) 1991-1998, Thomas G. Lane.
All Rights Reserved except as specified below.

Permission is hereby granted to use, copy, modify, and distribute this
software (or portions thereof) for any purpose, without fee, subject to these
conditions:
(1) If any part of the source code for this software is distributed, then this
README file must be included, with this copyright and no-warranty notice
unaltered; and any additions, deletions, or changes to the original files
must be clearly indicated in accompanying documentation.
(2) If only executable code is distributed, then the accompanying
documentation must state that "this software is based in part on the work of
the Independent JPEG Group".
(3) Permission for use of this software is granted only if the user accepts
full responsibility for any undesirable consequences; the authors accept
NO LIABILITY for damages of any kind.

These conditions apply to any software derived from or based on the IJG code,
not just to the unmodified library.  If you use our work, you ought to
acknowledge us.

Permission is NOT granted for the use of any IJG author's name or company name
in advertising or publicity relating to this software or products derived from
it.  This software may be referred to only as "the Independent JPEG Group's
software".

We specifically permit and encourage the use of this software as the basis of
commercial products, provided that all warranty or liability claims are
assumed by the product vendor.


===========================================================
Notices for file(s):
./emulator-check
./emulator-crash-service
./nimble_bridge
./qemu-img
./qemu/darwin-x86_64/qemu-system-aarch64
./qemu/darwin-x86_64/qemu-system-aarch64-headless
./qemu/darwin-x86_64/qemu-system-armel
./qemu/darwin-x86_64/qemu-system-armel-headless
./qemu/darwin-x86_64/qemu-system-i386
./qemu/darwin-x86_64/qemu-system-i386-headless
./qemu/darwin-x86_64/qemu-system-x86_64
./qemu/darwin-x86_64/qemu-system-x86_64-headless
./qsn
OpenglRender.dylib
emugl_common.dylib
The notices is included for the library: upb

===========================================================
Copyright 2014 gRPC authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.


===========================================================
Notices for file(s):
./nimble_bridge
./qemu/darwin-x86_64/qemu-system-aarch64
./qemu/darwin-x86_64/qemu-system-aarch64-headless
./qemu/darwin-x86_64/qemu-system-armel
./qemu/darwin-x86_64/qemu-system-armel-headless
./qemu/darwin-x86_64/qemu-system-i386
./qemu/darwin-x86_64/qemu-system-i386-headless
./qemu/darwin-x86_64/qemu-system-x86_64
./qemu/darwin-x86_64/qemu-system-x86_64-headless
./qsn
The notices is included for the library: jsoncpp

===========================================================
The following points clarify the QEMU license:

1) QEMU as a whole is released under the GNU General Public License,
version 2.

2) Parts of QEMU have specific licenses which are compatible with the
GNU General Public License, version 2. Hence each source file contains
its own licensing information.  Source files with no licensing information
are released under the GNU General Public License, version 2 or (at your
option) any later version.

As of July 2013, contributions under version 2 of the GNU General Public
License (and no later version) are only accepted for the following files
or directories: bsd-user/, linux-user/, hw/vfio/, hw/xen/xen_pt*.

3) The Tiny Code Generator (TCG) is released under the BSD license
   (see license headers in files).

4) QEMU is a trademark of Fabrice Bellard.

Fabrice Bellard and the QEMU team


===========================================================
Notices for file(s):
./qemu/darwin-x86_64/qemu-system-aarch64
./qemu/darwin-x86_64/qemu-system-aarch64-headless
./qemu/darwin-x86_64/qemu-system-armel
./qemu/darwin-x86_64/qemu-system-armel-headless
./qemu/darwin-x86_64/qemu-system-i386
./qemu/darwin-x86_64/qemu-system-i386-headless
./qemu/darwin-x86_64/qemu-system-x86_64
./qemu/darwin-x86_64/qemu-system-x86_64-headless
./qsn
The notices is included for the library: dtc

===========================================================
Licensing and contribution policy of dtc and libfdt
===================================================

This dtc package contains two pieces of software: dtc itself, and
libfdt which comprises the files in the libfdt/ subdirectory.  These
two pieces of software, although closely related, are quite distinct.
dtc does not incorporate or rely on libfdt for its operation, nor vice
versa.  It is important that these two pieces of software have
different license conditions.

As SPDX license tags in each source file attest, dtc is licensed
under the GNU GPL.  The full text of the GPL can be found in the file
entitled 'GPL' which should be included in this package.  dtc code,
therefore, may not be incorporated into works which do not have a GPL
compatible license.

libfdt, however, is GPL/BSD dual-licensed.  That is, it may be used
either under the terms of the GPL, or under the terms of the 2-clause
BSD license (aka the ISC license).  The full terms of that license can
be found are in the file entitled 'BSD-2-Clause'. This is, in
practice, equivalent to being BSD licensed, since the terms of the BSD
license are strictly more permissive than the GPL.

I made the decision to license libfdt in this way because I want to
encourage widespread and correct usage of flattened device trees,
including by proprietary or otherwise GPL-incompatible firmware or
tools.  Allowing libfdt to be used under the terms of the BSD license
makes that it easier for vendors or authors of such software to do so.

This does mean that libfdt code could be "stolen" - say, included in a
proprietary fimware and extended without contributing those extensions
back to the libfdt mainline.  While I hope that doesn't happen, I
believe the goal of allowing libfdt to be widely used is more
important than avoiding that.  libfdt is quite small, and hardly
rocket science; so the incentive for such impolite behaviour is small,
and the inconvenience caused thereby is not dire.

Licenses such as the LGPL which would allow code to be used in non-GPL
software, but also require contributions to be returned were
considered.  However, libfdt is designed to be used in firmwares and
other environments with unusual technical constraints.  It's difficult
to anticipate all possible changes which might be needed to meld
libfdt into such environments and so difficult to suitably word a
license that puts the boundary between what is and isn't permitted in
the intended place.  Again, I judged encouraging widespread use of
libfdt by keeping the license terms simple and familiar to be the more
important goal.

**IMPORTANT** It's intended that all of libfdt as released remain
permissively licensed this way.  Therefore only contributions which
are released under these terms can be merged into the libfdt mainline.


David Gibson <david@gibson.dropbear.id.au>
(principal original author of dtc and libfdt)
2 November 2007

===========================================================
Notices for file(s):
./emulator-check
./emulator-crash-service
./nimble_bridge
./qemu-img
./qemu/darwin-x86_64/qemu-system-aarch64
./qemu/darwin-x86_64/qemu-system-aarch64-headless
./qemu/darwin-x86_64/qemu-system-armel
./qemu/darwin-x86_64/qemu-system-armel-headless
./qemu/darwin-x86_64/qemu-system-i386
./qemu/darwin-x86_64/qemu-system-i386-headless
./qemu/darwin-x86_64/qemu-system-x86_64
./qemu/darwin-x86_64/qemu-system-x86_64-headless
./qsn
OpenglRender.dylib
emugl_common.dylib
The notices is included for the library: nlohmann_json

===========================================================
MIT License 

Copyright (c) 2013-2019 Niels Lohmann

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS 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. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


===========================================================
Notices for file(s):
./emulator-check
./emulator-crash-service
./nimble_bridge
./qemu-img
./qemu/darwin-x86_64/qemu-system-aarch64
./qemu/darwin-x86_64/qemu-system-aarch64-headless
./qemu/darwin-x86_64/qemu-system-armel
./qemu/darwin-x86_64/qemu-system-armel-headless
./qemu/darwin-x86_64/qemu-system-i386
./qemu/darwin-x86_64/qemu-system-i386-headless
./qemu/darwin-x86_64/qemu-system-x86_64
./qemu/darwin-x86_64/qemu-system-x86_64-headless
./qsn
OpenglRender.dylib
emugl_common.dylib
The notices is included for the library: keymaster-3

===========================================================

   Copyright (c) 2005-2015, The Android Open Source Project

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.


                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) 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. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS



===========================================================
Notices for file(s):
./emulator-crash-service
./qemu/darwin-x86_64/qemu-system-aarch64
./qemu/darwin-x86_64/qemu-system-armel
./qemu/darwin-x86_64/qemu-system-i386
./qemu/darwin-x86_64/qemu-system-x86_64
The notices is included for the library: Qt Svg

===========================================================
Licensed under the GNU LIBRARY GENERAL PUBLIC LICENSE, Version 2 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    https://www.gnu.org/licenses/lgpl-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

===========================================================
Notices for file(s):
./emulator-check
./emulator-crash-service
./nimble_bridge
./qemu-img
./qemu/darwin-x86_64/qemu-system-aarch64
./qemu/darwin-x86_64/qemu-system-aarch64-headless
./qemu/darwin-x86_64/qemu-system-armel
./qemu/darwin-x86_64/qemu-system-armel-headless
./qemu/darwin-x86_64/qemu-system-i386
./qemu/darwin-x86_64/qemu-system-i386-headless
./qemu/darwin-x86_64/qemu-system-x86_64
./qemu/darwin-x86_64/qemu-system-x86_64-headless
./qsn
OpenglRender.dylib
emugl_common.dylib
The notices is included for the library: libwebp

===========================================================
Copyright (c) 2010, Google Inc. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

  * Redistributions of source code must retain the above copyright
    notice, this list of conditions and the following disclaimer.

  * Redistributions in binary form must reproduce the above copyright
    notice, this list of conditions and the following disclaimer in
    the documentation and/or other materials provided with the
    distribution.

  * Neither the name of Google nor the names of its contributors may
    be used to endorse or promote products derived from this software
    without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Additional IP Rights Grant (Patents)
------------------------------------

"These implementations" means the copyrightable works that implement the WebM
codecs distributed by Google as part of the WebM Project.

Google hereby grants to you a perpetual, worldwide, non-exclusive, no-charge,
royalty-free, irrevocable (except as stated in this section) patent license to
make, have made, use, offer to sell, sell, import, transfer, and otherwise
run, modify and propagate the contents of these implementations of WebM, where
such license applies only to those patent claims, both currently owned by
Google and acquired in the future, licensable by Google that are necessarily
infringed by these implementations of WebM. This grant does not include claims
that would be infringed only as a consequence of further modification of these
implementations. If you or your agent or exclusive licensee institute or order
or agree to the institution of patent litigation or any other patent
enforcement activity against any entity (including a cross-claim or
counterclaim in a lawsuit) alleging that any of these implementations of WebM
or any code incorporated within any of these implementations of WebM
constitute direct or contributory patent infringement, or inducement of
patent infringement, then any patent rights granted to you under this License
for these implementations of WebM shall terminate as of the date such
litigation is filed.


===========================================================
Notices for file(s):
./nimble_bridge
./qemu/darwin-x86_64/qemu-system-aarch64
./qemu/darwin-x86_64/qemu-system-aarch64-headless
./qemu/darwin-x86_64/qemu-system-armel
./qemu/darwin-x86_64/qemu-system-armel-headless
./qemu/darwin-x86_64/qemu-system-i386
./qemu/darwin-x86_64/qemu-system-i386-headless
./qemu/darwin-x86_64/qemu-system-x86_64
./qemu/darwin-x86_64/qemu-system-x86_64-headless
./qsn
The notices is included for the library: Tink

===========================================================
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.


===========================================================
Notices for file(s):
./emulator
lib64/gles_swiftshader/libEGL.dylib
lib64/gles_swiftshader/libGLES_CM.dylib
lib64/gles_swiftshader/libGLESv2.dylib
The notices is included for the library: swiftshader

===========================================================
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.


===========================================================
Notices for file(s):
OpenglRender.dylib
The notices is included for the library: astc-codec

===========================================================

                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) 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. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.


===========================================================
Notices for file(s):
./emulator-check
./emulator-crash-service
./nimble_bridge
./qemu-img
./qemu/darwin-x86_64/qemu-system-aarch64
./qemu/darwin-x86_64/qemu-system-aarch64-headless
./qemu/darwin-x86_64/qemu-system-armel
./qemu/darwin-x86_64/qemu-system-armel-headless
./qemu/darwin-x86_64/qemu-system-i386
./qemu/darwin-x86_64/qemu-system-i386-headless
./qemu/darwin-x86_64/qemu-system-x86_64
./qemu/darwin-x86_64/qemu-system-x86_64-headless
./qsn
OpenglRender.dylib
emugl_common.dylib
The notices is included for the library: address_sorting

===========================================================
Copyright 2014 gRPC authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.


===========================================================
Notices for file(s):
./emulator-check
./emulator-crash-service
./nimble_bridge
./qemu-img
./qemu/darwin-x86_64/qemu-system-aarch64
./qemu/darwin-x86_64/qemu-system-aarch64-headless
./qemu/darwin-x86_64/qemu-system-armel
./qemu/darwin-x86_64/qemu-system-armel-headless
./qemu/darwin-x86_64/qemu-system-i386
./qemu/darwin-x86_64/qemu-system-i386-headless
./qemu/darwin-x86_64/qemu-system-x86_64
./qemu/darwin-x86_64/qemu-system-x86_64-headless
./qsn
OpenglRender.dylib
emugl_common.dylib
The notices is included for the library: libpng

===========================================================

This copy of the libpng notices is provided for your convenience.  In case of
any discrepancy between this copy and the notices in the file png.h that is
included in the libpng distribution, the latter shall prevail.

COPYRIGHT NOTICE, DISCLAIMER, and LICENSE:

If you modify libpng you may insert additional notices immediately following
this sentence.

This code is released under the libpng license.

libpng versions 1.0.7, July 1, 2000 through 1.6.34, September 29, 2017 are
Copyright (c) 2000-2002, 2004, 2006-2017 Glenn Randers-Pehrson, are
derived from libpng-1.0.6, and are distributed according to the same
disclaimer and license as libpng-1.0.6 with the following individuals
added to the list of Contributing Authors:

   Simon-Pierre Cadieux
   Eric S. Raymond
   Mans Rullgard
   Cosmin Truta
   Gilles Vollant
   James Yu
   Mandar Sahastrabuddhe
   Google Inc.
   Vadim Barkov

and with the following additions to the disclaimer:

   There is no warranty against interference with your enjoyment of the
   library or against infringement.  There is no warranty that our
   efforts or the library will fulfill any of your particular purposes
   or needs.  This library is provided with all faults, and the entire
   risk of satisfactory quality, performance, accuracy, and effort is with
   the user.

Some files in the "contrib" directory and some configure-generated
files that are distributed with libpng have other copyright owners and
are released under other open source licenses.

libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
Copyright (c) 1998-2000 Glenn Randers-Pehrson, are derived from
libpng-0.96, and are distributed according to the same disclaimer and
license as libpng-0.96, with the following individuals added to the list
of Contributing Authors:

   Tom Lane
   Glenn Randers-Pehrson
   Willem van Schaik

libpng versions 0.89, June 1996, through 0.96, May 1997, are
Copyright (c) 1996-1997 Andreas Dilger, are derived from libpng-0.88,
and are distributed according to the same disclaimer and license as
libpng-0.88, with the following individuals added to the list of
Contributing Authors:

   John Bowler
   Kevin Bracey
   Sam Bushell
   Magnus Holmgren
   Greg Roelofs
   Tom Tanner

Some files in the "scripts" directory have other copyright owners
but are released under this license.

libpng versions 0.5, May 1995, through 0.88, January 1996, are
Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.

For the purposes of this copyright and license, "Contributing Authors"
is defined as the following set of individuals:

   Andreas Dilger
   Dave Martindale
   Guy Eric Schalnat
   Paul Schmidt
   Tim Wegner

The PNG Reference Library is supplied "AS IS".  The Contributing Authors
and Group 42, Inc. disclaim all warranties, expressed or implied,
including, without limitation, the warranties of merchantability and of
fitness for any purpose.  The Contributing Authors and Group 42, Inc.
assume no liability for direct, indirect, incidental, special, exemplary,
or consequential damages, which may result from the use of the PNG
Reference Library, even if advised of the possibility of such damage.

Permission is hereby granted to use, copy, modify, and distribute this
source code, or portions hereof, for any purpose, without fee, subject
to the following restrictions:

  1. The origin of this source code must not be misrepresented.

  2. Altered versions must be plainly marked as such and must not
     be misrepresented as being the original source.

  3. This Copyright notice may not be removed or altered from any
     source or altered source distribution.

The Contributing Authors and Group 42, Inc. specifically permit, without
fee, and encourage the use of this source code as a component to
supporting the PNG file format in commercial products.  If you use this
source code in a product, acknowledgment is not required but would be
appreciated.

END OF COPYRIGHT NOTICE, DISCLAIMER, and LICENSE.

TRADEMARK:

The name "libpng" has not been registered by the Copyright owner
as a trademark in any jurisdiction.  However, because libpng has
been distributed and maintained world-wide, continually since 1995,
the Copyright owner claims "common-law trademark protection" in any
jurisdiction where common-law trademark is recognized.

OSI CERTIFICATION:

Libpng is OSI Certified Open Source Software.  OSI Certified Open Source is
a certification mark of the Open Source Initiative. OSI has not addressed
the additional disclaimers inserted at version 1.0.7.

EXPORT CONTROL:

The Copyright owner believes that the Export Control Classification
Number (ECCN) for libpng is EAR99, which means not subject to export
controls or International Traffic in Arms Regulations (ITAR) because
it is open source, publicly available software, that does not contain
any encryption software.  See the EAR, paragraphs 734.3(b)(3) and
734.7(b).

Glenn Randers-Pehrson
glennrp at users.sourceforge.net
September 29, 2017


===========================================================
Notices for file(s):
./emulator
lib64/gles_angle/libEGL.dylib
lib64/gles_angle/libGLESv2.dylib
lib64/gles_angle/libswiftshader_libEGL.dylib
lib64/gles_angle/libswiftshader_libGLESv2.dylib
lib64/gles_angle/libvk_swiftshader.dylib
The notices is included for the library: angle-renderer

===========================================================
Copyright (C) 2002-2013 The ANGLE Project Authors.
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:

    Redistributions of source code must retain the above copyright
    notice, this list of conditions and the following disclaimer.

    Redistributions in binary form must reproduce the above
    copyright notice, this list of conditions and the following
    disclaimer in the documentation and/or other materials provided
    with the distribution.

    Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc.
    Ltd., nor the names of their contributors may be used to endorse
    or promote products derived from this software without specific
    prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.


===========================================================
Notices for file(s):
./emulator
./emulator-check
./emulator-crash-service
./mksdcard
./nimble_bridge
./qemu-img
./qemu/darwin-x86_64/qemu-system-aarch64
./qemu/darwin-x86_64/qemu-system-aarch64-headless
./qemu/darwin-x86_64/qemu-system-armel
./qemu/darwin-x86_64/qemu-system-armel-headless
./qemu/darwin-x86_64/qemu-system-i386
./qemu/darwin-x86_64/qemu-system-i386-headless
./qemu/darwin-x86_64/qemu-system-x86_64
./qemu/darwin-x86_64/qemu-system-x86_64-headless
./qsn
The notices is included for the library: None

===========================================================

                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) 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. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.


===========================================================
Notices for file(s):
./emulator
./emulator-check
./emulator-crash-service
./nimble_bridge
./qemu-img
./qemu/darwin-x86_64/qemu-system-aarch64
./qemu/darwin-x86_64/qemu-system-aarch64-headless
./qemu/darwin-x86_64/qemu-system-armel
./qemu/darwin-x86_64/qemu-system-armel-headless
./qemu/darwin-x86_64/qemu-system-i386
./qemu/darwin-x86_64/qemu-system-i386-headless
./qemu/darwin-x86_64/qemu-system-x86_64
./qemu/darwin-x86_64/qemu-system-x86_64-headless
./qsn
OpenglRender.dylib
emugl_common.dylib
The notices is included for the library: libyuv

===========================================================
Copyright 2011 The LibYuv Project Authors. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

  * Redistributions of source code must retain the above copyright
    notice, this list of conditions and the following disclaimer.

  * Redistributions in binary form must reproduce the above copyright
    notice, this list of conditions and the following disclaimer in
    the documentation and/or other materials provided with the
    distribution.

  * Neither the name of Google nor the names of its contributors may
    be used to endorse or promote products derived from this software
    without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


===========================================================
Notices for file(s):
./emulator
lib64/qt/lib/libQt5CoreAndroidEmu.5.12.1.dylib
lib64/qt/lib/libQt5DBusAndroidEmu.5.12.1.dylib
lib64/qt/lib/libQt5GuiAndroidEmu.5.12.1.dylib
lib64/qt/lib/libQt5NetworkAndroidEmu.5.12.1.dylib
lib64/qt/lib/libQt5PrintSupportAndroidEmu.5.12.1.dylib
lib64/qt/lib/libQt5QmlAndroidEmu.5.12.1.dylib
lib64/qt/lib/libQt5QuickAndroidEmu.5.12.1.dylib
lib64/qt/lib/libQt5QuickWidgetsAndroidEmu.5.12.1.dylib
lib64/qt/lib/libQt5SvgAndroidEmu.5.12.1.dylib
lib64/qt/lib/libQt5WebChannelAndroidEmu.5.12.1.dylib
lib64/qt/lib/libQt5WebEngineCoreAndroidEmu.5.12.1.dylib
lib64/qt/lib/libQt5WebEngineWidgetsAndroidEmu.5.12.1.dylib
lib64/qt/lib/libQt5WebSocketsAndroidEmu.5.12.1.dylib
lib64/qt/lib/libQt5WidgetsAndroidEmu.5.12.1.dylib
lib64/qt/libexec/QtWebEngineProcess
lib64/qt/libexec/icudtl.dat
lib64/qt/libexec/qtwebengine_devtools_resources.pak
lib64/qt/libexec/qtwebengine_locales/am.pak
lib64/qt/libexec/qtwebengine_locales/ar.pak
lib64/qt/libexec/qtwebengine_locales/bg.pak
lib64/qt/libexec/qtwebengine_locales/bn.pak
lib64/qt/libexec/qtwebengine_locales/ca.pak
lib64/qt/libexec/qtwebengine_locales/cs.pak
lib64/qt/libexec/qtwebengine_locales/da.pak
lib64/qt/libexec/qtwebengine_locales/de.pak
lib64/qt/libexec/qtwebengine_locales/el.pak
lib64/qt/libexec/qtwebengine_locales/en-GB.pak
lib64/qt/libexec/qtwebengine_locales/en-US.pak
lib64/qt/libexec/qtwebengine_locales/es-419.pak
lib64/qt/libexec/qtwebengine_locales/es.pak
lib64/qt/libexec/qtwebengine_locales/et.pak
lib64/qt/libexec/qtwebengine_locales/fa.pak
lib64/qt/libexec/qtwebengine_locales/fi.pak
lib64/qt/libexec/qtwebengine_locales/fil.pak
lib64/qt/libexec/qtwebengine_locales/fr.pak
lib64/qt/libexec/qtwebengine_locales/gu.pak
lib64/qt/libexec/qtwebengine_locales/he.pak
lib64/qt/libexec/qtwebengine_locales/hi.pak
lib64/qt/libexec/qtwebengine_locales/hr.pak
lib64/qt/libexec/qtwebengine_locales/hu.pak
lib64/qt/libexec/qtwebengine_locales/id.pak
lib64/qt/libexec/qtwebengine_locales/it.pak
lib64/qt/libexec/qtwebengine_locales/ja.pak
lib64/qt/libexec/qtwebengine_locales/kn.pak
lib64/qt/libexec/qtwebengine_locales/ko.pak
lib64/qt/libexec/qtwebengine_locales/lt.pak
lib64/qt/libexec/qtwebengine_locales/lv.pak
lib64/qt/libexec/qtwebengine_locales/ml.pak
lib64/qt/libexec/qtwebengine_locales/mr.pak
lib64/qt/libexec/qtwebengine_locales/ms.pak
lib64/qt/libexec/qtwebengine_locales/nb.pak
lib64/qt/libexec/qtwebengine_locales/nl.pak
lib64/qt/libexec/qtwebengine_locales/pl.pak
lib64/qt/libexec/qtwebengine_locales/pt-BR.pak
lib64/qt/libexec/qtwebengine_locales/pt-PT.pak
lib64/qt/libexec/qtwebengine_locales/ro.pak
lib64/qt/libexec/qtwebengine_locales/ru.pak
lib64/qt/libexec/qtwebengine_locales/sk.pak
lib64/qt/libexec/qtwebengine_locales/sl.pak
lib64/qt/libexec/qtwebengine_locales/sr.pak
lib64/qt/libexec/qtwebengine_locales/sv.pak
lib64/qt/libexec/qtwebengine_locales/sw.pak
lib64/qt/libexec/qtwebengine_locales/ta.pak
lib64/qt/libexec/qtwebengine_locales/te.pak
lib64/qt/libexec/qtwebengine_locales/th.pak
lib64/qt/libexec/qtwebengine_locales/tr.pak
lib64/qt/libexec/qtwebengine_locales/uk.pak
lib64/qt/libexec/qtwebengine_locales/vi.pak
lib64/qt/libexec/qtwebengine_locales/zh-CN.pak
lib64/qt/libexec/qtwebengine_locales/zh-TW.pak
lib64/qt/libexec/qtwebengine_resources.pak
lib64/qt/libexec/qtwebengine_resources_100p.pak
lib64/qt/libexec/qtwebengine_resources_200p.pak
lib64/qt/plugins/bearer/libqgenericbearer.dylib
lib64/qt/plugins/iconengines/libqsvgicon.dylib
lib64/qt/plugins/imageformats/libqgif.dylib
lib64/qt/plugins/imageformats/libqicns.dylib
lib64/qt/plugins/imageformats/libqico.dylib
lib64/qt/plugins/imageformats/libqjpeg.dylib
lib64/qt/plugins/imageformats/libqmacheif.dylib
lib64/qt/plugins/imageformats/libqmacjp2.dylib
lib64/qt/plugins/imageformats/libqsvg.dylib
lib64/qt/plugins/imageformats/libqtga.dylib
lib64/qt/plugins/imageformats/libqtiff.dylib
lib64/qt/plugins/imageformats/libqwbmp.dylib
lib64/qt/plugins/imageformats/libqwebp.dylib
lib64/qt/plugins/platforms/libqcocoa.dylib
lib64/qt/plugins/styles/libqmacstyle.dylib
lib64/qt/resources/icudtl.dat
lib64/qt/resources/qtwebengine_devtools_resources.pak
lib64/qt/resources/qtwebengine_resources.pak
lib64/qt/resources/qtwebengine_resources_100p.pak
lib64/qt/resources/qtwebengine_resources_200p.pak
lib64/qt/translations/qtwebengine_locales/am.pak
lib64/qt/translations/qtwebengine_locales/ar.pak
lib64/qt/translations/qtwebengine_locales/bg.pak
lib64/qt/translations/qtwebengine_locales/bn.pak
lib64/qt/translations/qtwebengine_locales/ca.pak
lib64/qt/translations/qtwebengine_locales/cs.pak
lib64/qt/translations/qtwebengine_locales/da.pak
lib64/qt/translations/qtwebengine_locales/de.pak
lib64/qt/translations/qtwebengine_locales/el.pak
lib64/qt/translations/qtwebengine_locales/en-GB.pak
lib64/qt/translations/qtwebengine_locales/en-US.pak
lib64/qt/translations/qtwebengine_locales/es-419.pak
lib64/qt/translations/qtwebengine_locales/es.pak
lib64/qt/translations/qtwebengine_locales/et.pak
lib64/qt/translations/qtwebengine_locales/fa.pak
lib64/qt/translations/qtwebengine_locales/fi.pak
lib64/qt/translations/qtwebengine_locales/fil.pak
lib64/qt/translations/qtwebengine_locales/fr.pak
lib64/qt/translations/qtwebengine_locales/gu.pak
lib64/qt/translations/qtwebengine_locales/he.pak
lib64/qt/translations/qtwebengine_locales/hi.pak
lib64/qt/translations/qtwebengine_locales/hr.pak
lib64/qt/translations/qtwebengine_locales/hu.pak
lib64/qt/translations/qtwebengine_locales/id.pak
lib64/qt/translations/qtwebengine_locales/it.pak
lib64/qt/translations/qtwebengine_locales/ja.pak
lib64/qt/translations/qtwebengine_locales/kn.pak
lib64/qt/translations/qtwebengine_locales/ko.pak
lib64/qt/translations/qtwebengine_locales/lt.pak
lib64/qt/translations/qtwebengine_locales/lv.pak
lib64/qt/translations/qtwebengine_locales/ml.pak
lib64/qt/translations/qtwebengine_locales/mr.pak
lib64/qt/translations/qtwebengine_locales/ms.pak
lib64/qt/translations/qtwebengine_locales/nb.pak
lib64/qt/translations/qtwebengine_locales/nl.pak
lib64/qt/translations/qtwebengine_locales/pl.pak
lib64/qt/translations/qtwebengine_locales/pt-BR.pak
lib64/qt/translations/qtwebengine_locales/pt-PT.pak
lib64/qt/translations/qtwebengine_locales/ro.pak
lib64/qt/translations/qtwebengine_locales/ru.pak
lib64/qt/translations/qtwebengine_locales/sk.pak
lib64/qt/translations/qtwebengine_locales/sl.pak
lib64/qt/translations/qtwebengine_locales/sr.pak
lib64/qt/translations/qtwebengine_locales/sv.pak
lib64/qt/translations/qtwebengine_locales/sw.pak
lib64/qt/translations/qtwebengine_locales/ta.pak
lib64/qt/translations/qtwebengine_locales/te.pak
lib64/qt/translations/qtwebengine_locales/th.pak
lib64/qt/translations/qtwebengine_locales/tr.pak
lib64/qt/translations/qtwebengine_locales/uk.pak
lib64/qt/translations/qtwebengine_locales/vi.pak
lib64/qt/translations/qtwebengine_locales/zh-CN.pak
lib64/qt/translations/qtwebengine_locales/zh-TW.pak
The notices is included for the library: Qt 5

===========================================================
Licensed under the GNU LIBRARY GENERAL PUBLIC LICENSE, Version 2 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    https://www.gnu.org/licenses/lgpl-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

===========================================================
Notices for file(s):
./emulator-check
./emulator-crash-service
./nimble_bridge
./qemu-img
./qemu/darwin-x86_64/qemu-system-aarch64
./qemu/darwin-x86_64/qemu-system-aarch64-headless
./qemu/darwin-x86_64/qemu-system-armel
./qemu/darwin-x86_64/qemu-system-armel-headless
./qemu/darwin-x86_64/qemu-system-i386
./qemu/darwin-x86_64/qemu-system-i386-headless
./qemu/darwin-x86_64/qemu-system-x86_64
./qemu/darwin-x86_64/qemu-system-x86_64-headless
./qsn
OpenglRender.dylib
emugl_common.dylib
The notices is included for the library: grpc++

===========================================================
Copyright 2014 gRPC authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.


===========================================================
Notices for file(s):
./emulator-check
./emulator-crash-service
./nimble_bridge
./qemu-img
./qemu/darwin-x86_64/qemu-system-aarch64
./qemu/darwin-x86_64/qemu-system-aarch64-headless
./qemu/darwin-x86_64/qemu-system-armel
./qemu/darwin-x86_64/qemu-system-armel-headless
./qemu/darwin-x86_64/qemu-system-i386
./qemu/darwin-x86_64/qemu-system-i386-headless
./qemu/darwin-x86_64/qemu-system-x86_64
./qemu/darwin-x86_64/qemu-system-x86_64-headless
./qsn
OpenglRender.dylib
emugl_common.dylib
The notices is included for the library: breakpad

===========================================================
Copyright (c) 2006, Google Inc.
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

    * Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
    * Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

--------------------------------------------------------------------

Copyright 2001-2004 Unicode, Inc.

Disclaimer

This source code is provided as is by Unicode, Inc. No claims are
made as to fitness for any particular purpose. No warranties of any
kind are expressed or implied. The recipient agrees to determine
applicability of information provided. If this file has been
purchased on magnetic or optical media from Unicode, Inc., the
sole remedy for any claim will be exchange of defective media
within 90 days of receipt.

Limitations on Rights to Redistribute This Code

Unicode, Inc. hereby grants the right to freely use the information
supplied in this file in the creation of products supporting the
Unicode Standard, and to make copies of this file in any form
for internal or external distribution as long as this notice
remains attached.


===========================================================
Notices for file(s):
./qemu-img
./qemu/darwin-x86_64/qemu-system-aarch64
./qemu/darwin-x86_64/qemu-system-aarch64-headless
./qemu/darwin-x86_64/qemu-system-armel
./qemu/darwin-x86_64/qemu-system-armel-headless
./qemu/darwin-x86_64/qemu-system-i386
./qemu/darwin-x86_64/qemu-system-i386-headless
./qemu/darwin-x86_64/qemu-system-x86_64
./qemu/darwin-x86_64/qemu-system-x86_64-headless
The notices is included for the library: qemu

===========================================================
The following points clarify the QEMU license:

1) QEMU as a whole is released under the GNU General Public License,
version 2.

2) Parts of QEMU have specific licenses which are compatible with the
GNU General Public License, version 2. Hence each source file contains
its own licensing information.  Source files with no licensing information
are released under the GNU General Public License, version 2 or (at your
option) any later version.

As of July 2013, contributions under version 2 of the GNU General Public
License (and no later version) are only accepted for the following files
or directories: bsd-user/, linux-user/, hw/vfio/, hw/xen/xen_pt*.

3) The Tiny Code Generator (TCG) is released under the BSD license
   (see license headers in files).

4) QEMU is a trademark of Fabrice Bellard.

Fabrice Bellard and the QEMU team


===========================================================
Notices for file(s):
./emulator-check
./emulator-crash-service
./nimble_bridge
./qemu-img
./qemu/darwin-x86_64/qemu-system-aarch64
./qemu/darwin-x86_64/qemu-system-aarch64-headless
./qemu/darwin-x86_64/qemu-system-armel
./qemu/darwin-x86_64/qemu-system-armel-headless
./qemu/darwin-x86_64/qemu-system-i386
./qemu/darwin-x86_64/qemu-system-i386-headless
./qemu/darwin-x86_64/qemu-system-x86_64
./qemu/darwin-x86_64/qemu-system-x86_64-headless
./qsn
OpenglRender.dylib
emugl_common.dylib
The notices is included for the library: c-ares

===========================================================
Copyright 1998 by the Massachusetts Institute of Technology.
 
Permission to use, copy, modify, and distribute this software and its
documentation for any purpose and without fee is hereby granted, provided that
the above copyright notice appear in all copies and that both that copyright
notice and this permission notice appear in supporting documentation, and that
the name of M.I.T. not be used in advertising or publicity pertaining to
distribution of the software without specific, written prior permission.
M.I.T. makes no representations about the suitability of this software for any
purpose.  It is provided "as is" without express or implied warranty.


===========================================================
Notices for file(s):
./emulator
bin64/e2fsck
bin64/fsck.ext4
bin64/mkfs.ext4
bin64/resize2fs
bin64/tune2fs
The notices is included for the library: e2fs

===========================================================
This package, the EXT2 filesystem utilities, are made available under
the GNU Public License version 2, with the exception of the lib/ext2fs
and lib/e2p libraries, which are made available under the GNU Library
General Public License Version 2, the lib/uuid library which is made
available under a BSD-style license and the lib/et and lib/ss
libraries which are made available under an MIT-style license.  Please
see lib/uuid/COPYING for more details for the license for the files
comprising the libuuid library, and the source file headers of the
libet and libss libraries for more information.

The most recent officially distributed version can be found at
http://e2fsprogs.sourceforge.net.  If you need to make a distribution,
that's the one you should use.  If there is some reason why you'd like
a more recent version that is still in ALPHA testing (i.e., either
using the "WIP" test distributions or one from the hg or git
repository from the development branch, please contact me
(tytso@mit.edu) before you ship.  The release schedules for this
package are flexible, if you give me enough lead time.


					Theodore Ts'o
					23-June-2007

----------------------------------------------------------------------
Licensed under the GNU GENERAL PUBLIC LICENSE, Version 2 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    https://www.gnu.org/licenses/gpl-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

===========================================================
Notices for file(s):
./emulator
The notices is included for the library: bios

===========================================================
- SeaBIOS (bios.bin) is the successor of pc bios.
  See http://www.seabios.org/ for more information.

- The VGA BIOS and the Cirrus VGA BIOS come from the LGPL VGA bios
  project (http://www.nongnu.org/vgabios/).

- The PowerPC Open Hack'Ware Open Firmware Compatible BIOS is
  available at https://repo.or.cz/openhackware.git.

- OpenBIOS (http://www.openbios.org/) is a free (GPL v2) portable
  firmware implementation. The goal is to implement a 100% IEEE
  1275-1994 (referred to as Open Firmware) compliant firmware.
  The included images for PowerPC (for 32 and 64 bit PPC CPUs),
  Sparc32 (including QEMU,tcx.bin and QEMU,cgthree.bin) and Sparc64 are built
  from OpenBIOS SVN revision 1280.

- SLOF (Slimline Open Firmware) is a free IEEE 1275 Open Firmware
  implementation for certain IBM POWER hardware.  The sources are at
  https://github.com/aik/SLOF, and the image currently in qemu is
  built from git tag qemu-slof-20191217.

- sgabios (the Serial Graphics Adapter option ROM) provides a means for
  legacy x86 software to communicate with an attached serial console as
  if a video card were attached.  The master sources reside in a subversion
  repository at http://sgabios.googlecode.com/svn/trunk.  A git mirror is
  available at https://git.qemu.org/git/sgabios.git.

- The PXE roms come from the iPXE project. Built with BANNER_TIME 0.
  Sources available at http://ipxe.org.  Vendor:Device ID -> ROM mapping:

	8086:100e -> pxe-e1000.rom
	8086:1209 -> pxe-eepro100.rom
	1050:0940 -> pxe-ne2k_pci.rom
	1022:2000 -> pxe-pcnet.rom
	10ec:8139 -> pxe-rtl8139.rom
	1af4:1000 -> pxe-virtio.rom

- The sources for the Alpha palcode image is available from:
  https://github.com/rth7680/qemu-palcode.git

- The u-boot binary for e500 comes from the upstream denx u-boot project where
  it was compiled using the qemu-ppce500 target.
  A git mirror is available at: https://git.qemu.org/git/u-boot.git
  The hash used to compile the current version is: 2072e72

- Skiboot (https://github.com/open-power/skiboot/) is an OPAL
  (OpenPower Abstraction Layer) firmware for OpenPOWER systems. It can
  run an hypervisor OS or simply a host OS on the "baremetal"
  platform, also known as the PowerNV (Non-Virtualized) platform.

- QemuMacDrivers (https://github.com/ozbenh/QemuMacDrivers) is a project to
  provide virtualised drivers for PPC MacOS guests.

- The "edk2-*.fd.bz2" images are platform firmware binaries and matching UEFI
  variable store templates built from the TianoCore community's EFI Development
  Kit II project
  <https://github.com/tianocore/tianocore.github.io/wiki/EDK-II>. The images
  were built at git tag "edk2-stable201905". The firmware binaries bundle parts
  of the OpenSSL project, at git tag "OpenSSL_1_1_1b" (the OpenSSL tag is a
  function of the edk2 tag). Parts of the Berkeley SoftFloat library are
  bundled as well, at Release 3e plus a subsequent typo fix (commit
  b64af41c3276f97f0e181920400ee056b9c88037), as an OpenSSL dependency on 32-bit
  ARM. Licensing information is given in "edk2-licenses.txt". The image files
  are described by the JSON documents in the "pc-bios/descriptors" directory,
  which conform to the "docs/interop/firmware.json" schema.

- OpenSBI (https://github.com/riscv/opensbi) aims to provide an open-source
  reference implementation of the RISC-V Supervisor Binary Interface (SBI)
  specifications for platform-specific firmwares executing in M-mode. For all
  supported platforms, OpenSBI provides several runtime firmware examples.
  These example firmwares can be used to replace the legacy riscv-pk bootloader
  and enable the use of well-known bootloaders such as U-Boot.
  OpenSBI is distributed under the terms of the BSD 2-clause license
  ("Simplified BSD License" or "FreeBSD License", SPDX: BSD-2-Clause). OpenSBI
  source code also contains code reused from other projects desribed here:
  https://github.com/riscv/opensbi/blob/master/ThirdPartyNotices.md.


===========================================================
Notices for file(s):
./emulator-crash-service
./qemu/darwin-x86_64/qemu-system-aarch64
./qemu/darwin-x86_64/qemu-system-armel
./qemu/darwin-x86_64/qemu-system-i386
./qemu/darwin-x86_64/qemu-system-x86_64
The notices is included for the library: Qt Widgets

===========================================================
Licensed under the GNU LIBRARY GENERAL PUBLIC LICENSE, Version 2 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    https://www.gnu.org/licenses/lgpl-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

===========================================================
Notices for file(s):
./emulator-check
./emulator-crash-service
./nimble_bridge
./qemu-img
./qemu/darwin-x86_64/qemu-system-aarch64
./qemu/darwin-x86_64/qemu-system-aarch64-headless
./qemu/darwin-x86_64/qemu-system-armel
./qemu/darwin-x86_64/qemu-system-armel-headless
./qemu/darwin-x86_64/qemu-system-i386
./qemu/darwin-x86_64/qemu-system-i386-headless
./qemu/darwin-x86_64/qemu-system-x86_64
./qemu/darwin-x86_64/qemu-system-x86_64-headless
./qsn
OpenglRender.dylib
emugl_common.dylib
The notices is included for the library: glib-2.0

===========================================================
Licensed under the GNU LIBRARY GENERAL PUBLIC LICENSE, Version 2.1 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    https://www.gnu.org/licenses/lgpl-2.1

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

===========================================================
Notices for file(s):
./qemu/darwin-x86_64/qemu-system-aarch64
./qemu/darwin-x86_64/qemu-system-aarch64-headless
./qemu/darwin-x86_64/qemu-system-armel
./qemu/darwin-x86_64/qemu-system-armel-headless
./qemu/darwin-x86_64/qemu-system-i386
./qemu/darwin-x86_64/qemu-system-i386-headless
./qemu/darwin-x86_64/qemu-system-x86_64
./qemu/darwin-x86_64/qemu-system-x86_64-headless
The notices is included for the library: qemu-system

===========================================================
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.


===========================================================
Notices for file(s):
./emulator-check
./emulator-crash-service
./nimble_bridge
./qemu-img
./qemu/darwin-x86_64/qemu-system-aarch64
./qemu/darwin-x86_64/qemu-system-aarch64-headless
./qemu/darwin-x86_64/qemu-system-armel
./qemu/darwin-x86_64/qemu-system-armel-headless
./qemu/darwin-x86_64/qemu-system-i386
./qemu/darwin-x86_64/qemu-system-i386-headless
./qemu/darwin-x86_64/qemu-system-x86_64
./qemu/darwin-x86_64/qemu-system-x86_64-headless
./qsn
OpenglRender.dylib
emugl_common.dylib
The notices is included for the library: gpr

===========================================================
Copyright 2014 gRPC authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.


===========================================================
Notices for file(s):
./emulator-check
./emulator-crash-service
./nimble_bridge
./qemu-img
./qemu/darwin-x86_64/qemu-system-aarch64
./qemu/darwin-x86_64/qemu-system-aarch64-headless
./qemu/darwin-x86_64/qemu-system-armel
./qemu/darwin-x86_64/qemu-system-armel-headless
./qemu/darwin-x86_64/qemu-system-i386
./qemu/darwin-x86_64/qemu-system-i386-headless
./qemu/darwin-x86_64/qemu-system-x86_64
./qemu/darwin-x86_64/qemu-system-x86_64-headless
./qsn
OpenglRender.dylib
android-metrics.dylib
emugl_common.dylib
The notices is included for the library: LibXml2

===========================================================
Except where otherwise noted in the source code (e.g. the files hash.c,
list.c and the trio files, which are covered by a similar licence but
with different Copyright notices) all the files are:

 Copyright (C) 1998-2012 Daniel Veillard.  All Rights Reserved.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is fur-
nished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FIT-
NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.


===========================================================
Notices for file(s):
./emulator-check
./emulator-crash-service
./nimble_bridge
./qemu-img
./qemu/darwin-x86_64/qemu-system-aarch64
./qemu/darwin-x86_64/qemu-system-aarch64-headless
./qemu/darwin-x86_64/qemu-system-armel
./qemu/darwin-x86_64/qemu-system-armel-headless
./qemu/darwin-x86_64/qemu-system-i386
./qemu/darwin-x86_64/qemu-system-i386-headless
./qemu/darwin-x86_64/qemu-system-x86_64
./qemu/darwin-x86_64/qemu-system-x86_64-headless
./qsn
OpenglRender.dylib
emugl_common.dylib
The notices is included for the library: ffmpeg

===========================================================

This software uses libraries from the FFmpeg project under the LGPLv2.1
----
Licensed under the GNU LIBRARY GENERAL PUBLIC LICENSE, Version 2.1 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    https://www.gnu.org/licenses/lgpl-2.1

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.


===========================================================
Notices for file(s):
./emulator-check
./emulator-crash-service
./nimble_bridge
./qemu-img
./qemu/darwin-x86_64/qemu-system-aarch64
./qemu/darwin-x86_64/qemu-system-aarch64-headless
./qemu/darwin-x86_64/qemu-system-armel
./qemu/darwin-x86_64/qemu-system-armel-headless
./qemu/darwin-x86_64/qemu-system-i386
./qemu/darwin-x86_64/qemu-system-i386-headless
./qemu/darwin-x86_64/qemu-system-x86_64
./qemu/darwin-x86_64/qemu-system-x86_64-headless
./qsn
OpenglRender.dylib
android-metrics.dylib
emugl_common.dylib
The notices is included for the library: picosha2

===========================================================
MIT License

Copyright (c) 2017 okdshin

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS 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. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


===========================================================
Notices for file(s):
./emulator-check
./emulator-crash-service
./nimble_bridge
./qemu-img
./qemu/darwin-x86_64/qemu-system-aarch64
./qemu/darwin-x86_64/qemu-system-aarch64-headless
./qemu/darwin-x86_64/qemu-system-armel
./qemu/darwin-x86_64/qemu-system-armel-headless
./qemu/darwin-x86_64/qemu-system-i386
./qemu/darwin-x86_64/qemu-system-i386-headless
./qemu/darwin-x86_64/qemu-system-x86_64
./qemu/darwin-x86_64/qemu-system-x86_64-headless
./qsn
OpenglRender.dylib
emugl_common.dylib
The notices is included for the library: hostapd

===========================================================
wpa_supplicant and hostapd
--------------------------

Copyright (c) 2002-2012, Jouni Malinen <j@w1.fi> and contributors
All Rights Reserved.


See the README file for the current license terms.

This software was previously distributed under BSD/GPL v2 dual license
terms that allowed either of those license alternatives to be
selected. As of February 11, 2012, the project has chosen to use only
the BSD license option for future distribution. As such, the GPL v2
license option is no longer used. It should be noted that the BSD
license option (the one with advertisement clause removed) is compatible
with GPL and as such, does not prevent use of this software in projects
that use GPL.

Some of the files may still include pointers to GPL version 2 license
terms. However, such copyright and license notifications are maintained
only for attribution purposes and any distribution of this software
after February 11, 2012 is no longer under the GPL v2 option.


===========================================================
Notices for file(s):
./qemu-img
./qemu/darwin-x86_64/qemu-system-aarch64
./qemu/darwin-x86_64/qemu-system-aarch64-headless
./qemu/darwin-x86_64/qemu-system-armel
./qemu/darwin-x86_64/qemu-system-armel-headless
./qemu/darwin-x86_64/qemu-system-i386
./qemu/darwin-x86_64/qemu-system-i386-headless
./qemu/darwin-x86_64/qemu-system-x86_64
./qemu/darwin-x86_64/qemu-system-x86_64-headless
The notices is included for the library: fdt

===========================================================
Licensing and contribution policy of dtc and libfdt
===================================================

This dtc package contains two pieces of software: dtc itself, and
libfdt which comprises the files in the libfdt/ subdirectory.  These
two pieces of software, although closely related, are quite distinct.
dtc does not incorporate or rely on libfdt for its operation, nor vice
versa.  It is important that these two pieces of software have
different license conditions.

As SPDX license tags in each source file attest, dtc is licensed
under the GNU GPL.  The full text of the GPL can be found in the file
entitled 'GPL' which should be included in this package.  dtc code,
therefore, may not be incorporated into works which do not have a GPL
compatible license.

libfdt, however, is GPL/BSD dual-licensed.  That is, it may be used
either under the terms of the GPL, or under the terms of the 2-clause
BSD license (aka the ISC license).  The full terms of that license can
be found are in the file entitled 'BSD-2-Clause'. This is, in
practice, equivalent to being BSD licensed, since the terms of the BSD
license are strictly more permissive than the GPL.

I made the decision to license libfdt in this way because I want to
encourage widespread and correct usage of flattened device trees,
including by proprietary or otherwise GPL-incompatible firmware or
tools.  Allowing libfdt to be used under the terms of the BSD license
makes that it easier for vendors or authors of such software to do so.

This does mean that libfdt code could be "stolen" - say, included in a
proprietary fimware and extended without contributing those extensions
back to the libfdt mainline.  While I hope that doesn't happen, I
believe the goal of allowing libfdt to be widely used is more
important than avoiding that.  libfdt is quite small, and hardly
rocket science; so the incentive for such impolite behaviour is small,
and the inconvenience caused thereby is not dire.

Licenses such as the LGPL which would allow code to be used in non-GPL
software, but also require contributions to be returned were
considered.  However, libfdt is designed to be used in firmwares and
other environments with unusual technical constraints.  It's difficult
to anticipate all possible changes which might be needed to meld
libfdt into such environments and so difficult to suitably word a
license that puts the boundary between what is and isn't permitted in
the intended place.  Again, I judged encouraging widespread use of
libfdt by keeping the license terms simple and familiar to be the more
important goal.

**IMPORTANT** It's intended that all of libfdt as released remain
permissively licensed this way.  Therefore only contributions which
are released under these terms can be merged into the libfdt mainline.


David Gibson <david@gibson.dropbear.id.au>
(principal original author of dtc and libfdt)
2 November 2007


===========================================================
Notices for file(s):
./emulator
./emulator-check
./emulator-crash-service
./nimble_bridge
./qemu-img
./qemu/darwin-x86_64/qemu-system-aarch64
./qemu/darwin-x86_64/qemu-system-aarch64-headless
./qemu/darwin-x86_64/qemu-system-armel
./qemu/darwin-x86_64/qemu-system-armel-headless
./qemu/darwin-x86_64/qemu-system-i386
./qemu/darwin-x86_64/qemu-system-i386-headless
./qemu/darwin-x86_64/qemu-system-x86_64
./qemu/darwin-x86_64/qemu-system-x86_64-headless
./qsn
OpenglRender.dylib
android-emu-agents.dylib
android-metrics.dylib
emugl_common.dylib
The notices is included for the library: libselinux

===========================================================
This library (libselinux) is public domain software, i.e. not copyrighted.

Warranty Exclusion
------------------
You agree that this software is a
non-commercially developed program that may contain "bugs" (as that
term is used in the industry) and that it may not function as intended.
The software is licensed "as is". NSA makes no, and hereby expressly
disclaims all, warranties, express, implied, statutory, or otherwise
with respect to the software, including noninfringement and the implied
warranties of merchantability and fitness for a particular purpose.

Limitation of Liability
-----------------------
In no event will NSA be liable for any damages, including loss of data,
lost profits, cost of cover, or other special, incidental,
consequential, direct or indirect damages arising from the software or
the use thereof, however caused and on any theory of liability. This
limitation will apply even if NSA has been advised of the possibility
of such damage. You acknowledge that this is a reasonable allocation of
risk.


===========================================================
Notices for file(s):
./emulator-crash-service
./qemu/darwin-x86_64/qemu-system-aarch64
./qemu/darwin-x86_64/qemu-system-armel
./qemu/darwin-x86_64/qemu-system-i386
./qemu/darwin-x86_64/qemu-system-x86_64
The notices is included for the library: Qt WebEngineWidgets

===========================================================
Licensed under the GNU LIBRARY GENERAL PUBLIC LICENSE, Version 2 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    https://www.gnu.org/licenses/lgpl-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

===========================================================
Notices for file(s):
./emulator
OpenglRender.dylib
lib64/libshadertranslator.dylib
The notices is included for the library: angle

===========================================================
Copyright (C) 2002-2013 The ANGLE Project Authors.
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:

    Redistributions of source code must retain the above copyright
    notice, this list of conditions and the following disclaimer.

    Redistributions in binary form must reproduce the above
    copyright notice, this list of conditions and the following
    disclaimer in the documentation and/or other materials provided
    with the distribution.

    Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc.
    Ltd., nor the names of their contributors may be used to endorse
    or promote products derived from this software without specific
    prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.


===========================================================
Notices for file(s):
./emulator-crash-service
./qemu/darwin-x86_64/qemu-system-aarch64
./qemu/darwin-x86_64/qemu-system-armel
./qemu/darwin-x86_64/qemu-system-i386
./qemu/darwin-x86_64/qemu-system-x86_64
The notices is included for the library: Qt WebSockets

===========================================================
Licensed under the GNU LIBRARY GENERAL PUBLIC LICENSE, Version 2 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    https://www.gnu.org/licenses/lgpl-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

===========================================================
Notices for file(s):
./emulator-check
./emulator-crash-service
./nimble_bridge
./qemu-img
./qemu/darwin-x86_64/qemu-system-aarch64
./qemu/darwin-x86_64/qemu-system-aarch64-headless
./qemu/darwin-x86_64/qemu-system-armel
./qemu/darwin-x86_64/qemu-system-armel-headless
./qemu/darwin-x86_64/qemu-system-i386
./qemu/darwin-x86_64/qemu-system-i386-headless
./qemu/darwin-x86_64/qemu-system-x86_64
./qemu/darwin-x86_64/qemu-system-x86_64-headless
./qsn
OpenglRender.dylib
android-curl.dylib
android-metrics.dylib
emugl_common.dylib
The notices is included for the library: boringssl

===========================================================
BoringSSL is a fork of OpenSSL. As such, large parts of it fall under OpenSSL
licensing. Files that are completely new have a Google copyright and an ISC
license. This license is reproduced at the bottom of this file.

Contributors to BoringSSL are required to follow the CLA rules for Chromium:
https://cla.developers.google.com/clas

Files in third_party/ have their own licenses, as described therein. The MIT
license, for third_party/fiat, which, unlike other third_party directories, is
compiled into non-test libraries, is included below.

The OpenSSL toolkit stays under a dual license, i.e. both the conditions of the
OpenSSL License and the original SSLeay license apply to the toolkit. See below
for the actual license texts. Actually both licenses are BSD-style Open Source
licenses. In case of any license issues related to OpenSSL please contact
openssl-core@openssl.org.

The following are Google-internal bug numbers where explicit permission from
some authors is recorded for use of their work. (This is purely for our own
record keeping.)
  27287199
  27287880
  27287883

  OpenSSL License
  ---------------

/* ====================================================================
 * Copyright (c) 1998-2011 The OpenSSL Project.  All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer. 
 *
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in
 *    the documentation and/or other materials provided with the
 *    distribution.
 *
 * 3. All advertising materials mentioning features or use of this
 *    software must display the following acknowledgment:
 *    "This product includes software developed by the OpenSSL Project
 *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
 *
 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
 *    endorse or promote products derived from this software without
 *    prior written permission. For written permission, please contact
 *    openssl-core@openssl.org.
 *
 * 5. Products derived from this software may not be called "OpenSSL"
 *    nor may "OpenSSL" appear in their names without prior written
 *    permission of the OpenSSL Project.
 *
 * 6. Redistributions of any form whatsoever must retain the following
 *    acknowledgment:
 *    "This product includes software developed by the OpenSSL Project
 *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
 *
 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 * OF THE POSSIBILITY OF SUCH DAMAGE.
 * ====================================================================
 *
 * This product includes cryptographic software written by Eric Young
 * (eay@cryptsoft.com).  This product includes software written by Tim
 * Hudson (tjh@cryptsoft.com).
 *
 */

 Original SSLeay License
 -----------------------

/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
 * All rights reserved.
 *
 * This package is an SSL implementation written
 * by Eric Young (eay@cryptsoft.com).
 * The implementation was written so as to conform with Netscapes SSL.
 * 
 * This library is free for commercial and non-commercial use as long as
 * the following conditions are aheared to.  The following conditions
 * apply to all code found in this distribution, be it the RC4, RSA,
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 * included with this distribution is covered by the same copyright terms
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 * 
 * Copyright remains Eric Young's, and as such any Copyright notices in
 * the code are not to be removed.
 * If this package is used in a product, Eric Young should be given attribution
 * as the author of the parts of the library used.
 * This can be in the form of a textual message at program startup or
 * in documentation (online or textual) provided with the package.
 * 
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. All advertising materials mentioning features or use of this software
 *    must display the following acknowledgement:
 *    "This product includes cryptographic software written by
 *     Eric Young (eay@cryptsoft.com)"
 *    The word 'cryptographic' can be left out if the rouines from the library
 *    being used are not cryptographic related :-).
 * 4. If you include any Windows specific code (or a derivative thereof) from 
 *    the apps directory (application code) you must include an acknowledgement:
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 * 
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 * 
 * The licence and distribution terms for any publically available version or
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 * copied and put under another distribution licence
 * [including the GNU Public Licence.]
 */


ISC license used for completely new code in BoringSSL:

/* Copyright (c) 2015, Google Inc.
 *
 * Permission to use, copy, modify, and/or distribute this software for any
 * purpose with or without fee is hereby granted, provided that the above
 * copyright notice and this permission notice appear in all copies.
 *
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
 * SPECIAL, DIRECT, 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 THIS SOFTWARE. */


The code in third_party/fiat carries the MIT license:

Copyright (c) 2015-2016 the fiat-crypto authors (see
https://github.com/mit-plv/fiat-crypto/blob/master/AUTHORS).

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS 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. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


Licenses for support code
-------------------------

Parts of the TLS test suite are under the Go license. This code is not included
in BoringSSL (i.e. libcrypto and libssl) when compiled, however, so
distributing code linked against BoringSSL does not trigger this license:

Copyright (c) 2009 The Go Authors. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

   * Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
   * Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
   * Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


BoringSSL uses the Chromium test infrastructure to run a continuous build,
trybots etc. The scripts which manage this, and the script for generating build
metadata, are under the Chromium license. Distributing code linked against
BoringSSL does not trigger this license.

Copyright 2015 The Chromium Authors. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

   * Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
   * Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
   * Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


===========================================================
Notices for file(s):
./emulator-check
./emulator-crash-service
./nimble_bridge
./qemu-img
./qemu/darwin-x86_64/qemu-system-aarch64
./qemu/darwin-x86_64/qemu-system-aarch64-headless
./qemu/darwin-x86_64/qemu-system-armel
./qemu/darwin-x86_64/qemu-system-armel-headless
./qemu/darwin-x86_64/qemu-system-i386
./qemu/darwin-x86_64/qemu-system-i386-headless
./qemu/darwin-x86_64/qemu-system-x86_64
./qemu/darwin-x86_64/qemu-system-x86_64-headless
./qsn
OpenglRender.dylib
android-emu-tracing.dylib
android-metrics.dylib
emugl_common.dylib
emulator-protos.dylib
libprotobuf-lite.dylib
libprotobuf.dylib
The notices is included for the library: protobuf

===========================================================
Copyright 2008, Google Inc.
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

    * Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
    * Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Code generated by the Protocol Buffer compiler is owned by the owner
of the input file used when generating it.  This code is not
standalone and requires a support library to be linked with it.  This
support library is itself covered by the above license.


===========================================================
Notices for file(s):
./emulator
The notices is included for the library: gtest

===========================================================
The following points clarify the QEMU license:

1) QEMU as a whole is released under the GNU General Public License,
version 2.

2) Parts of QEMU have specific licenses which are compatible with the
GNU General Public License, version 2. Hence each source file contains
its own licensing information.  Source files with no licensing information
are released under the GNU General Public License, version 2 or (at your
option) any later version.

As of July 2013, contributions under version 2 of the GNU General Public
License (and no later version) are only accepted for the following files
or directories: bsd-user/, linux-user/, hw/vfio/, hw/xen/xen_pt*.

3) The Tiny Code Generator (TCG) is released under the BSD license
   (see license headers in files).

4) QEMU is a trademark of Fabrice Bellard.

Fabrice Bellard and the QEMU team


===========================================================
Notices for file(s):
./nimble_bridge
The notices is included for the library: mynewt-nmble

===========================================================
Apache Mynewt NimBLE
Copyright 2015-2021 The Apache Software Foundation

This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).

Portions of this software were developed at
Runtime Inc, copyright 2015.


===========================================================
Notices for file(s):
./emulator
lib64/vulkan/libMoltenVK.dylib
lib64/vulkan/libvk_swiftshader.dylib
lib64/vulkan/libvulkan.dylib
The notices is included for the library: vulkan-sdk

===========================================================
VULKAN RELEASE 1.2.131.1 LINUX LICENSE SUMMARY
================================================================================

List of Open Source Licenses in use by SDK components:

    Apache-2.0
    GLM
    Khronos
    MIT
    Qt License
    glslangProper

The full text of each license is listed below.

================================================================================
Apache-2.0
--------------------------------------------------------------------------------

Apache License

Version 2.0, January 2004

http://www.apache.org/licenses/

TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

1. Definitions.

"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.

"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.

"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.

"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.

"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.

"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.

"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).

"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.

"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."

"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.

2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.

3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.

4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:

    You must give any other recipients of the Work or Derivative Works a copy of this License; and
    You must cause any modified files to carry prominent notices stating that You changed the files; and
    You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
    If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.

    You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.

5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.

6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.

7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) 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. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.

8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.

9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.

END OF TERMS AND CONDITIONS


================================================================================
GLM
--------------------------------------------------------------------------------

================================================================================
OpenGL Mathematics (GLM)
--------------------------------------------------------------------------------
GLM is licensed under The Happy Bunny License and MIT License

================================================================================
The Happy Bunny License (Modified MIT License)
--------------------------------------------------------------------------------
Copyright (c) 2005 - 2014 G-Truc Creation

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

Restrictions:
 By making use of the Software for military purposes, you choose to make a
 Bunny unhappy.

THE SOFTWARE IS 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. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

================================================================================
The MIT License
--------------------------------------------------------------------------------
Copyright (c) 2005 - 2014 G-Truc Creation

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS 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. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

================================================================================
Khronos
--------------------------------------------------------------------------------

Copyright (c) YYYY The Khronos Group Inc.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and/or associated documentation files (the "Materials"),
to deal in the Materials without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute, sublicense,
and/or sell copies of the Materials, and to permit persons to whom the
Materials are furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Materials.

MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS
STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND
HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/

THE MATERIALS 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. IN NO EVENT SHALL
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS
IN THE MATERIALS.

================================================================================
MIT
--------------------------------------------------------------------------------

Copyright <YEAR> <COPYRIGHT HOLDER>

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS 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. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

================================================================================
Qt License
--------------------------------------------------------------------------------

LunarG’s SDK incorporates the following Qt 5.13 modules and add-ons: Qt Core, Qt GUI, Qt Widgets and Qt WebEngine.

Information on the general Qt 5.13 license is available at this link: https://doc.qt.io/qt-5/licensing.html

Information on the overall Qt Core license and third party modules contained in Qt Core are available at this link: https://doc.qt.io/qt-5/qtcore-index.html

Information on the overall Qt GUI license and third party modules contained in Qt GUI are available at this link: https://doc.qt.io/qt-5/qtgui-index.html

Information on the overall Qt Widgets license is available at this link: https://doc.qt.io/qt-5/qtwidgets-index.html

Information on the overall Qt WebEngine license and third party modules contained in Qt WebEngine are available at this link: https://doc.qt.io/qt-5/qtwebengine-licensing.html



================================================================================
glslangProper
--------------------------------------------------------------------------------

//
// Copyright (C) 2015-2018 Google, Inc.
// Copyright (C) <various other dates and companies>
//
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
// are met:
//
//    Redistributions of source code must retain the above copyright
//    notice, this list of conditions and the following disclaimer.
//
//    Redistributions in binary form must reproduce the above
//    copyright notice, this list of conditions and the following
//    disclaimer in the documentation and/or other materials provided
//    with the distribution.
//
//    Neither the name of 3Dlabs Inc. Ltd. nor the names of its
//    contributors may be used to endorse or promote products derived
//    from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
//




===========================================================
Notices for file(s):
./qemu/darwin-x86_64/qemu-system-aarch64
./qemu/darwin-x86_64/qemu-system-aarch64-headless
./qemu/darwin-x86_64/qemu-system-armel
./qemu/darwin-x86_64/qemu-system-armel-headless
./qemu/darwin-x86_64/qemu-system-i386
./qemu/darwin-x86_64/qemu-system-i386-headless
./qemu/darwin-x86_64/qemu-system-x86_64
./qemu/darwin-x86_64/qemu-system-x86_64-headless
./qsn
The notices is included for the library: pixman-1

===========================================================
The following is the MIT license, agreed upon by most contributors.
Copyright holders of new code should use this license statement where
possible. They may also add themselves to the list below.

/*
 * Copyright 1987, 1988, 1989, 1998  The Open Group
 * Copyright 1987, 1988, 1989 Digital Equipment Corporation
 * Copyright 1999, 2004, 2008 Keith Packard
 * Copyright 2000 SuSE, Inc.
 * Copyright 2000 Keith Packard, member of The XFree86 Project, Inc.
 * Copyright 2004, 2005, 2007, 2008, 2009, 2010 Red Hat, Inc.
 * Copyright 2004 Nicholas Miell
 * Copyright 2005 Lars Knoll & Zack Rusin, Trolltech
 * Copyright 2005 Trolltech AS
 * Copyright 2007 Luca Barbato
 * Copyright 2008 Aaron Plattner, NVIDIA Corporation
 * Copyright 2008 Rodrigo Kumpera
 * Copyright 2008 André Tupinambá
 * Copyright 2008 Mozilla Corporation
 * Copyright 2008 Frederic Plourde
 * Copyright 2009, Oracle and/or its affiliates. All rights reserved.
 * Copyright 2009, 2010 Nokia Corporation
 *
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the "Software"),
 * to deal in the Software without restriction, including without limitation
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 * and/or sell copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice (including the next
 * paragraph) shall be included in all copies or substantial portions of the
 * Software.
 * 
 * THE SOFTWARE IS 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.  IN NO EVENT SHALL
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 * DEALINGS IN THE SOFTWARE.
 */


===========================================================
Notices for file(s):
./emulator-check
./emulator-crash-service
./nimble_bridge
./qemu-img
./qemu/darwin-x86_64/qemu-system-aarch64
./qemu/darwin-x86_64/qemu-system-aarch64-headless
./qemu/darwin-x86_64/qemu-system-armel
./qemu/darwin-x86_64/qemu-system-armel-headless
./qemu/darwin-x86_64/qemu-system-i386
./qemu/darwin-x86_64/qemu-system-i386-headless
./qemu/darwin-x86_64/qemu-system-x86_64
./qemu/darwin-x86_64/qemu-system-x86_64-headless
./qsn
OpenglRender.dylib
android-curl.dylib
android-metrics.dylib
emugl_common.dylib
The notices is included for the library: libcurl

===========================================================
COPYRIGHT AND PERMISSION NOTICE

Copyright (c) 1996 - 2018, Daniel Stenberg, <daniel@haxx.se>, and many
contributors, see the THANKS file.

All rights reserved.

Permission to use, copy, modify, and distribute this software for any purpose
with or without fee is hereby granted, provided that the above copyright
notice and this permission notice appear in all copies.

THE SOFTWARE IS 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 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
OR OTHER DEALINGS IN THE 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 this Software without prior written authorization of the copyright holder.


